เพื่อให้เข้าใจข้อผิดพลาด 1452 อันดับแรก เราต้องสร้างตารางและเชื่อมโยงสิ่งนั้นกับตารางอื่นโดยใช้ข้อจำกัดของคีย์ภายนอก
การสร้างตารางแรก −
mysql> สร้างตาราง ForeignTable-> (-> id int,-> ชื่อ varchar(200),-> Fk_pk int-> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.43 วินาที)
หลังจากสร้างตารางแรกสำเร็จ เราจะสร้างตารางที่สอง -
mysql> สร้างตาราง primaryTable1-> (-> Fk_pk int,-> DeptName varchar(200),-> Primary key(Fk_pk)-> );Query OK, 0 แถวได้รับผลกระทบ (0.48 วินาที)
ตอนนี้ เราได้สร้างทั้งสองตารางแล้ว จากนั้นตารางทั้งสองจะเกี่ยวข้องกับความช่วยเหลือของคำสั่ง altercommand เช่นเดียวกับการเพิ่มข้อจำกัดของคีย์ต่างประเทศ ไวยากรณ์มีดังนี้ −
แก้ไขตาราง yourFirstTable เพิ่มข้อจำกัด anyConstraintName foreign key(column_name ซึ่ง isacts foreign key ในตารางที่สอง) yourSecondTable(column_name ซึ่งทำหน้าที่เป็นคีย์หลักในตารางที่สอง)
ตอนนี้ แบบสอบถามข้างต้นถูกใช้เพื่อเชื่อมโยงทั้งสองตาราง ได้ดังนี้ −
mysql> แก้ไขตาราง ForeignTable เพิ่มข้อจำกัด constFKPK foreign key(Fk_pk) referencesprimaryTable1(Fk_pk);Query OK, 0 แถวได้รับผลกระทบ (1.57 วินาที)Records:0 Duplicates:0 Warnings:0
ตอนนี้ทั้งสองตารางมีความเกี่ยวข้องกัน ระเบียนจะถูกแทรกลงในตาราง 'foreignTable' ดังนี้ -
mysql> INSERT เป็นค่า ForeignTable (1,'John',1);
ซึ่งส่งผลให้เกิดข้อผิดพลาดที่แสดงในผลลัพธ์ด้านล่าง -
ข้อผิดพลาด 1452 (23000):ไม่สามารถเพิ่มหรืออัปเดตแถวย่อย:ข้อจำกัดของคีย์ภายนอกล้มเหลว (`business`.`foreigntable`, CONSTRAINT `constFKPK` FOREIGN KEY (`Fk_pk`)REFERENCES `primarytable1` (`fk_pk` ))
ในผลลัพธ์ข้างต้น เราได้รับข้อผิดพลาด 'ไม่สามารถเพิ่มหรืออัปเดตแถวย่อย:ข้อจำกัดของคีย์ต่างประเทศล้มเหลว' เราสามารถลบข้อผิดพลาดนี้ได้โดยการแทรกระเบียนลงในตาราง primaryTable1 ดังที่แสดงด้านล่าง -
mysql> INSERT ลงในค่า primaryTable1 (1,'ComputerScience'); ตกลง ตกลง 1 แถวได้รับผลกระทบ (0.14 วินาที)
หลังจากแทรกระเบียนลงในตาราง primaryTable1 แล้ว เราสามารถแทรกระเบียนที่จำเป็นลงในตาราง ForeignTable ได้โดยไม่มีข้อผิดพลาด ด้านล่างนี้ −
mysql> INSERT เป็นค่า ForeignTable (1,'John',1); แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.13 วินาที)
ตอนนี้ เราสามารถแสดงระเบียนตารางของ ForeignTable โดยใช้คำสั่ง select ซึ่งมีดังนี้ -
mysql> SELECT * จาก ForeignTable;
ผลลัพธ์ของแบบสอบถามข้างต้นคือ −
<ก่อนหน้า>+------+------+-------+| id | ชื่อ | Fk_pk |+------+------+-------+| 1 | จอห์น | 1 |+------+------+------- +1 แถวในชุด (0.00 วินาที)นอกจากนี้เรายังสามารถแสดงระเบียนตารางของ primarytable1 โดยใช้คำสั่ง select ซึ่งมีดังนี้ -
mysql> SELECT * จาก primarytable1;
ผลลัพธ์ของแบบสอบถามข้างต้นคือ −
<ก่อนหน้า>+------+-----------------+| Fk_pk | DeptName |+------+----------------+| 1 | ComputerScience |+-------+-----------------+1 แถวในชุด (0.00 วินาที)ข้อผิดพลาด 1452 - ไม่สามารถเพิ่มหรืออัปเดตแถวย่อย:ข้อจำกัดของคีย์นอกล้มเหลวเกิดขึ้นเมื่อเริ่มแทรกบันทึกข้อมูลลงใน ForeignTable
หมายเหตุ:ขั้นแรกให้เพิ่มระเบียนลงในตารางที่สอง นั่นคือ primarytable1 เพื่อหลีกเลี่ยงข้อผิดพลาดข้างต้น