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

เมื่อใดที่ทั้งสองตารางเชื่อมต่อกับ MySQL 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 10 ไม่มีอยู่ในตาราง 'ลูกค้า') แล้ว MySQL จะแสดงข้อผิดพลาดดังต่อไปนี้เนื่องจากความล้มเหลวของข้อจำกัดของคีย์ต่างประเทศ .

mysql> insert into orders values(400, 'Notebook',10);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`query`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`id`) REFERENCES `customer` (`id`))