ข้อผิดพลาดนี้เกิดขึ้นทุกครั้งที่เราเพิ่มข้อจำกัดของคีย์ภายนอกระหว่างตารางและแทรกระเบียนลงในตารางย่อย เรามาดูตัวอย่างกัน
การสร้างตารางลูก
mysql> create table ChildDemo -> ( -> id int, -> FKPK int -> ); Query OK, 0 rows affected (0.86 sec)
กำลังสร้างตารางที่สอง
mysql> create table ParentDemo -> ( -> FKPK int, -> Name varchar(100) -> , -> primary key(FKPK) -> ); Query OK, 0 rows affected (0.57 sec)
เพื่อเพิ่มข้อจำกัดของคีย์ต่างประเทศ
mysql> alter table ChildDemo add constraint ConstChild foreign key(FKPK) references ParentDemo(FKPK); Query OK, 0 rows affected (1.97 sec) Records: 0 Duplicates: 0 Warnings: 0
หลังจากสร้างข้อจำกัดของคีย์ต่างประเทศ เมื่อใดก็ตามที่เราแทรกระเบียนลงในตารางแรกหรือตารางรอง เราจะได้รับข้อผิดพลาดข้างต้น
mysql> insert into ChildDemo values(1,3); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`business`.`childdemo`, CONSTRAINT `ConstChild` FOREIGN KEY (`FKPK`) REFERENCES `parentdemo` (`fkpk`))
ข้อผิดพลาดเกิดขึ้นเมื่อคุณพยายามเพิ่มแถวที่ไม่มีแถวที่ตรงกันในตารางอื่น
ตามที่ระบุไว้
“ความสัมพันธ์ของคีย์ต่างประเทศเกี่ยวข้องกับตารางพาเรนต์ที่มีค่าข้อมูลส่วนกลาง และตารางย่อยที่มีค่าเหมือนกันที่ชี้กลับไปที่พาเรนต์ ประโยค FOREIGN KEY ระบุไว้ในตารางย่อย จะปฏิเสธการดำเนินการ INSERT หรือ UPDATE ที่พยายามสร้างค่าคีย์ต่างประเทศในตารางย่อยหากไม่มีค่าคีย์ตัวเลือกที่ตรงกันในตารางหลัก”