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

Làm thế nào chúng ta có thể gán ràng buộc NGOẠI KHÓA trên nhiều cột?

MySQL cho phép chúng ta thêm ràng buộc NGOẠI KHÓA trên nhiều cột trong bảng. Điều kiện là mỗi Khóa ngoại trong bảng con phải tham chiếu đến bảng mẹ khác nhau.

Ví dụ

Giả sử chúng ta có một bảng ‘customer2’ có ràng buộc Khóa chính trên trường ‘cust_unq_id’ như sau -

mysql> describe customer2;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| cust_id     | int(11)     | YES  |     | NULL    |       |
| First_name  | varchar(20) | YES  |     | NULL    |       |
| Last_name   | varchar(20) | YES  |     | NULL    |       |
| City        | varchar(10) | YES  |     | NULL    |       |
| cust_unq_id | int(11)     | NO   | PRI | 0       |       |
+-------------+-------------+------+-----+---------+-------+
5 rows in set (0.06 sec)

Và chúng tôi có một bảng order1 đã có ràng buộc Khoá ngoại trên trường ‘Cust_id’ tham chiếu đến bảng mẹ ‘khách hàng’.

mysql> describe orders1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| order_id     | int(11)     | NO   | PRI | NULL    |       |
| Product_name | varchar(25) | YES  |     | NULL    |       |
| orderdate    | date        | YES  |     | NULL    |       |
| Cust_id      | int(11)     | YES  | MUL | NULL    |       |
| cust_unq_id  | int(11)     | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
5 rows in set (0.04 sec)

Bây giờ, với sự trợ giúp của truy vấn ALTER TABLE sau, chúng ta có thể thêm một ràng buộc khóa ngoại khác vào trường ‘cust_unq_id’ tham chiếu đến bảng mẹ ‘customer2’

mysql> Alter table orders1 add FOREIGN KEY(cust_unq_id) REFERENCES Customer2(Cust_unq_id);
Query OK, 0 rows affected (0.25 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> describe orders1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| order_id     | int(11)     | NO   | PRI | NULL    |       |
| Product_name | varchar(25) | YES  |     | NULL    |       |
| orderdate    | date        | YES  |     | NULL    |       |
| Cust_id      | int(11)     | YES  | MUL | NULL    |       |
| cust_unq_id  | int(11)     | YES  | MUL | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
5 rows in set (0.06 sec)

Từ tập kết quả ở trên, có thể nhận thấy rằng bảng ‘order1’ có hai bảng, một trên ‘cust_id’ và một trên các ràng buộc khóa ngoại ‘cust_unq_id’.