Computer >> Máy Tính >  >> Lập trình >> MySQL

Lỗi MySQL 1452 - Không thể thêm hoặc hàng con:ràng buộc khóa ngoại không thành công

Để hiểu lỗi 1452, trước tiên chúng ta cần tạo một bảng và liên kết bảng đó với một bảng khác với sự trợ giúp của ràng buộc khóa ngoại.

Tạo bảng đầu tiên -

mysql> CREATE table ForeignTable
-> (
-> id int,
-> name varchar(200),
-> Fk_pk int
-> );
Query OK, 0 rows affected (0.43 sec)

Sau khi tạo bảng đầu tiên thành công, chúng ta sẽ tạo bảng thứ hai -

mysql> CREATE table primaryTable1
-> (
-> Fk_pk int,
-> DeptName varchar(200),
-> Primary key(Fk_pk)
-> );
Query OK, 0 rows affected (0.48 sec)

Bây giờ, chúng tôi đã tạo cả hai bảng. Sau đó, cả hai bảng có liên quan với nhau với sự trợ giúp của lệnh thay thế cũng như thêm ràng buộc khóa ngoại. Cú pháp như sau -

alter table yourFirstTable add constraint anyConstraintName foreign key(column_name which is
acts foreign key in second table) yourSecondTable(column_name which acts primary key in
second table).

Bây giờ, truy vấn trên được sử dụng để liên kết cả hai bảng. Điều này được đưa ra như sau -

mysql> alter table ForeignTable add constraint constFKPK foreign key(Fk_pk) references
primaryTable1(Fk_pk);
Query OK, 0 rows affected (1.57 sec)
Records: 0 Duplicates: 0 Warnings: 0

Bây giờ, cả hai bảng đều có liên quan với nhau. Các bản ghi được chèn vào bảng 'ForeignTable' asfollows -

mysql> INSERT into ForeignTable values(1,'John',1);

Điều này dẫn đến lỗi được hiển thị trong đầu ra bên dưới -

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
(`business`.`foreigntable`, CONSTRAINT `constFKPK` FOREIGN KEY (`Fk_pk`)
REFERENCES `primarytable1` (`fk_pk`))

Trong kết quả đầu ra ở trên, chúng tôi nhận được lỗi "Không thể thêm hoặc cập nhật hàng con:không thể truy cập khóa ngoại lai". Chúng tôi có thể loại bỏ lỗi này bằng cách chèn các bản ghi vào bảng primaryTable1 như được hiển thị bên dưới -

mysql> INSERT into primaryTable1 values(1,'ComputerScience');
Query OK, 1 row affected (0.14 sec)

Sau khi chèn các bản ghi vào bảng primaryTable1, chúng ta có thể chèn các bản ghi cần thiết vào bảng ForeignTable mà không có bất kỳ lỗi nào. Điều này được hiển thị bên dưới -

mysql> INSERT into ForeignTable values(1,'John',1);
Query OK, 1 row affected (0.13 sec)

Bây giờ, chúng ta có thể hiển thị các bản ghi bảng của ForeignTable với sự trợ giúp của lệnh select, như sau -

mysql> SELECT * from ForeignTable;

Kết quả của truy vấn trên là -

+------+------+-------+
| id   | name | Fk_pk |
+------+------+-------+
| 1    | John | 1     |
+------+------+-------+
1 row in set (0.00 sec)

Chúng tôi cũng có thể hiển thị các bản ghi bảng của primarytable1 với sự trợ giúp của lệnh select, như sau -

mysql> SELECT * from primarytable1;

Kết quả của truy vấn trên là -

+-------+-----------------+
| Fk_pk | DeptName        |
+-------+-----------------+
| 1     | ComputerScience |
+-------+-----------------+
1 row in set (0.00 sec)

Lỗi 1452 - Không thể thêm hoặc cập nhật một hàng con:một ràng buộc khóa ngoại không thành công khi bản ghi dữ liệu ban đầu được chèn vào ForeignTable.

Note: First, add the record into the second table i.e primarytable1 to avoid the above error.