Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ข้อผิดพลาด MySQL 1452 - ไม่สามารถเพิ่มหรือแถวลูก:ข้อ จำกัด ของคีย์ต่างประเทศล้มเหลว


เพื่อให้เข้าใจข้อผิดพลาด 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 เพื่อหลีกเลี่ยงข้อผิดพลาดข้างต้น