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

Làm cách nào chúng ta có thể thêm các ràng buộc NGOẠI KHÓA vào nhiều trường của bảng MySQL?

MySQL cho phép chúng ta thêm ràng buộc NGOẠI KHÓA trên nhiều trường 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ó một 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, 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ể 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’.