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

Khi hai bảng được kết nối với MySQL FOREIGN KEY thì làm thế nào chúng ta có thể nói rằng tính toàn vẹn của dữ liệu được duy trì trong bảng con?

Trên thực tế, các khóa ngoại thực thi tính toàn vẹn tham chiếu giúp chúng tôi tự động duy trì tính nhất quán và toàn vẹn của dữ liệu. Nó có thể được hiểu với ví dụ về hai bảng có tên là ‘khách hàng’ và ‘đơn đặt hàng’. Ở đây, ‘khách hàng’ là bảng mẹ và ‘đơn đặt hàng’ là bảng con. Chúng tôi không thể tạo đơn đặt hàng cho một khách hàng không tồn tại. Nó có thể được chứng minh bằng cách chèn các giá trị trong cả hai bảng như sau -

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)

Bây giờ, giả sử nếu chúng ta cố gắng chèn giá trị trong bảng 'đơn đặt hàng' cho một khách hàng không tồn tại (id 10 không tồn tại trong bảng 'khách hàng') thì MySQL sẽ gặp lỗi như sau do lỗi ràng buộc khóa ngoại .

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