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

MySQL Error 1452: Foreign Key Constraint Fails

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`))

สาเหตุและแก้ไข

  1. FK Value ไม่มีใน Parent: ต้อง Insert Parent ก่อน → INSERT INTO ParentDemo VALUES (3, 'Parent Name');
  2. Data Type ไม่ตรง: Parent PK และ Child FK ต้องมี Data Type, Sign, Collation เหมือนกันทุกประการ
  3. 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)