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

จะเกิดอะไรขึ้นหากฉันจะลบแถวออกจากตารางพาเรนต์ MySQL


ขณะลบแถวออกจากตารางพาเรนต์ หากใช้ข้อมูลของแถวนั้นในตารางย่อย MySQL จะแสดงข้อผิดพลาดเนื่องจากความล้มเหลวของข้อจำกัดของ FOREIGN KEY สามารถเข้าใจได้ด้วยตัวอย่างสองตารางชื่อ 'ลูกค้า' และ 'คำสั่งซื้อ' ที่นี่ 'ลูกค้า' คือตารางหลักและ 'คำสั่งซื้อ' คือตารางย่อย เราไม่สามารถลบแถวที่ใช้ใน 'คำสั่งซื้อ' ของตารางย่อยจากตาราง 'ลูกค้า' สามารถแสดงให้เห็นได้โดยการลบค่าออกจากตารางหลักดังนี้ −

mysql> Select * from Customer;
+----+--------+
| id | name   |
+----+--------+
| 1  | Gaurav |
| 2  | Raman  |
| 3  | Harshit|
| 4  | Aarav  |
+----+--------+
4 rows in set (0.00 sec)

mysql> Select * from orders;
+----------+----------+------+
| order_id | product  | id   |
+----------+----------+------+
| 100      | Notebook | 1    |
| 110      | Pen      | 1    |
| 120      | Book     | 2    |
| 130      | Charts   | 2    |
+----------+----------+------+
4 rows in set (0.00 sec)

ทีนี้ สมมติว่าถ้าเราจะพยายามลบแถวที่มี id =1 หรือ id =2 (เพราะทั้งสองแถวที่ใช้ในตารางย่อย) จาก 'ลูกค้า' ตารางหลัก MySQL จะแสดงข้อผิดพลาดดังต่อไปนี้เนื่องจากความล้มเหลวของต่างประเทศ ข้อจำกัดที่สำคัญ

mysql> Delete from customer where id = 1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`query`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`id`)REFERENCES `customer` (`id`))

mysql> Delete from customer where id = 2;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`query`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`id`)REFERENCES `customer` (`id`))