Error 1452 เกิดเมื่อ Insert/Update Child Table ด้วยค่า Foreign Key ที่ ไม่มีอยู่ใน Parent Table
สร้างสถานการณ์ Error
-- Parent
mysql> CREATE TABLE ParentDemo (FKPK INT, Name VARCHAR(100), PRIMARY KEY(FKPK));
-- Child
mysql> CREATE TABLE ChildDemo (id INT, FKPK INT);
-- Add FK Constraint
mysql> ALTER TABLE ChildDemo ADD CONSTRAINT ConstChild
-> FOREIGN KEY (FKPK) REFERENCES ParentDemo(FKPK);
ลอง Insert Child โดย FK ไม่มีใน Parent
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`))
สาเหตุและแก้ไข
- FK Value ไม่มีใน Parent: ต้อง Insert Parent ก่อน →
INSERT INTO ParentDemo VALUES (3, 'Parent Name'); - Data Type ไม่ตรง: Parent PK และ Child FK ต้องมี Data Type, Sign, Collation เหมือนกันทุกประการ
- Character Set/Collation ไม่ตรง: VARCHAR FK ต้องมี Charset/Collation เหมือน PK
แก้ไขโดย Insert Parent ก่อน
mysql> INSERT INTO ParentDemo VALUES (3, 'Parent Name'); mysql> INSERT INTO ChildDemo VALUES (1, 3); -- OK ตอนนี้
หลักการ: Foreign Key = "Child ต้องชี้ไป Parent ที่มีอยู่จริง" → Insert Parent ก่อน Child เสมอ | ลบ Parent ต้องจัดการ Child ก่อน (CASCADE/SET NULL/RESTRICT)