กระทู้เก่าบอร์ด อ.Yeadram
1,479 4
URL.หัวข้อ /
URL
เปลี่ยน Primary Key หลาย ๆ ตาราง
หากมีข้อมูลดังต่อไปนี้ (ในการทำงานจริง จะมี field มากกว่านี้ค่ะ)
ตาราง TCustomer มีข้อมูลดังนี้
CustID(Text -Primary key) CustName
123 นายทดสอบ
124 นางสายเสมอ
225 น.ส.สุดสาย
AAA นายลองดี
ตาราง TDetail มีข้อมูลดังนี้
CustID(Text -Primary key) Desp
123 ร่วมทดสอบ
225 งดทดสอบ
AAA ระหว่างทดลอง
ถ้าต้องการเปลี่ยน CustID ในตาราง TCustomer จาก AAA เป็น 128 โดยให้ข้อมูล CustName ยังเหมือนเดิม และต้องการให้ AAA ในตาราง TDetail เปลี่ยนแปลงด้วย โดยข้อมูลอื่น ๆ ยังคงเดิมเช่นกัน สามารถทำได้หรือไม่ โดยเมื่อเปลี่ยนแล้วจะได้ข้อมูลทั้ง 2 ตารางดังนี้ค่ะ
ตาราง TCustomer มีข้อมูลดังนี้
CustID(Text) CustName
123 นายทดสอบ
124 นางสายเสมอ
225 น.ส.สุดสาย
128 นายลองดี
ตาราง TDetail มีข้อมูลดังนี้
CustID(Text) Desp
123 ร่วมทดสอบ
225 งดทดสอบ
128 ระหว่างทดลอง
ขอบคุณค่ะ
ตาราง TCustomer มีข้อมูลดังนี้
CustID(Text -Primary key) CustName
123 นายทดสอบ
124 นางสายเสมอ
225 น.ส.สุดสาย
AAA นายลองดี
ตาราง TDetail มีข้อมูลดังนี้
CustID(Text -Primary key) Desp
123 ร่วมทดสอบ
225 งดทดสอบ
AAA ระหว่างทดลอง
ถ้าต้องการเปลี่ยน CustID ในตาราง TCustomer จาก AAA เป็น 128 โดยให้ข้อมูล CustName ยังเหมือนเดิม และต้องการให้ AAA ในตาราง TDetail เปลี่ยนแปลงด้วย โดยข้อมูลอื่น ๆ ยังคงเดิมเช่นกัน สามารถทำได้หรือไม่ โดยเมื่อเปลี่ยนแล้วจะได้ข้อมูลทั้ง 2 ตารางดังนี้ค่ะ
ตาราง TCustomer มีข้อมูลดังนี้
CustID(Text) CustName
123 นายทดสอบ
124 นางสายเสมอ
225 น.ส.สุดสาย
128 นายลองดี
ตาราง TDetail มีข้อมูลดังนี้
CustID(Text) Desp
123 ร่วมทดสอบ
225 งดทดสอบ
128 ระหว่างทดลอง
ขอบคุณค่ะ
4 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R01923
จากรูปที่สองนี้ คุณลองเปิดสองตารางที่มีความสัมพันธ์ดังกล่าวมาพร้อมๆ กันดังนี้ แล้วลองเปลี่ยนข้อมูล ฝั่ง one ดู จะเห็นทันทีว่า ข้อมูลในฝั่ง many เปลี่ยนตามไปด้วยโดยอัตโนมัติ
เพราะฉะนั้น งานของคุณก็มีแค่งานเดียว คือ สั่งอัพเดต ตารางฝั่ง one
Update TCustomer set CustID = "128" Where CustID = "AAA";
แต่ถ้าคุณไม่ได้ตั้งค่าความสัมพันธ์ไว้ดังที่กล่าว คุณก็แค่เพิ่มงานเข้าไปอีก 1 จังหวะ
Update TDetails Set CustID="128" Where CustID = "AAA";
ปล. เท่าที่สังเกตุจากข้อมูลตัวอย่าง แม้ว่าสองตารางนี้จะไม่ได้ตั้งค่าความสัมพันธ์ "ปรับปรุงระเบียนที่เกี่ยวข้องทั้งหมด" แต่ก็ควร กระทำกับ TCustomer ก่อนจะดีกว่าครับ
จากรูปที่สองนี้ คุณลองเปิดสองตารางที่มีความสัมพันธ์ดังกล่าวมาพร้อมๆ กันดังนี้ แล้วลองเปลี่ยนข้อมูล ฝั่ง one ดู จะเห็นทันทีว่า ข้อมูลในฝั่ง many เปลี่ยนตามไปด้วยโดยอัตโนมัติ
เพราะฉะนั้น งานของคุณก็มีแค่งานเดียว คือ สั่งอัพเดต ตารางฝั่ง one
Update TCustomer set CustID = "128" Where CustID = "AAA";
แต่ถ้าคุณไม่ได้ตั้งค่าความสัมพันธ์ไว้ดังที่กล่าว คุณก็แค่เพิ่มงานเข้าไปอีก 1 จังหวะ
Update TDetails Set CustID="128" Where CustID = "AAA";
ปล. เท่าที่สังเกตุจากข้อมูลตัวอย่าง แม้ว่าสองตารางนี้จะไม่ได้ตั้งค่าความสัมพันธ์ "ปรับปรุงระเบียนที่เกี่ยวข้องทั้งหมด" แต่ก็ควร กระทำกับ TCustomer ก่อนจะดีกว่าครับ
3 @R01925
ขอบคุณค่ะ เข้าใจแล้วค่ะ อาจารย์อธิบายละเอียดดีค่ะ
4 @R01927
ถามคำถามได้ชัดเจนดีครับ คนตอบเข้าใจความต้องการของผู้ถาม ก็ตอบได้ง่าย เร็ว และไหลลื่นไปเรื่อยแหละครับ
Time: 0.3192s
คือต้องเปลี่ยนข้อมูลฝั่ง one ก่อนแล้วค่อยไปเปลี่ยนฝั่ง many ตามไปด้วย
หรืออาจไม่ต้อง เปลี่ยนข้อมูลฝั่ง many เลยก็ได้ กรณีที่ตั้งค่าความสัมพันธ์ไว้ก่อนล่วงหน้า เพราะข้อมูลมันจะเปลี่ยนตามกันไปอัตโนมัติครับ