Khóa ngoại trong sql thực chất là một con trỏ có chức năng trỏ tới khóa chính của bảng khác nhằm tạo ra các quan hệ liên kết ràng buộc giữa các bảng.
Khóa ngoại là gì?
Khóa ngoại thực chất là một trường hoặc một tập hợp các trường trong một bảng, tham chiếu tới khóa chính (PRIMARY KEY) của bảng khác. Để dễ hình dùng hơn bạn có hãy xem xét ví dụ phía dưới:
Giả sử ta có một bảng EMPLOYEE lưu trữ thông tin nhân viên như sau:
+----+----------+-----------+-----------+ | ID | NAME | SALARY | MONTH | +----+----------+-----------+-----------+ | 1 | kien | 1000 | 1 | | 2 | ngoc | 2000 | 1 | | 3 | nghia | 3000 | 1 | | 4 | trang | 1000 | 2 | | 5 | ngoc | 1000 | 2 | +----+----------+-----------+-----------+
Bảng này có khóa chính là trường ID
Và một bảng EMPLOYEE_ADDRESS lưu trữ thông tin địa chỉ của nhân viên
+----+----------+-----------+-----------+ | ID | ADDRESS1 | ADDRESS2 |EMPLOYEE_ID| +----+----------+-----------+-----------+ | 1 | Ha noi | Ha noi 1 | 1 | | 1 | Ha noi | Ha noi 2 | 2 | | 1 | Ha noi | Ha noi 3 | 3 | | 1 | Ha noi | Ha noi 4 | 4 | | 1 | Ha noi | Ha noi 5 | 5 | | 1 | Ha noi | Ha noi 6 | 6 | +----+----------+-----------+-----------+
Bảng EMPLOYEE_ADDRESS này có khóa chính là trường ID và có khóa ngoại là trường EMPLOYEE_ID, khóa ngoại này tham chiếu đến khóa chính ID của bảng
Như vậy, ta hoàn toàn có thể biết được thông tin danh sách địa chỉ của nhân viên có tên X bất kì nào đó thông qua việc tìm ra ID của nhân viên ở bảng EMPLOYEE và từ ID đó tìm ra địa chỉ thông qua EMPLOYEE_ID trong bảng EMPLOYEE_ADDRESS
Tạo khóa ngoại trong SQL trong khi tạo bảng
Trong MYSQL:
CREATE TABLE EMPLOYEE_ADDRESS ( ID int NOT NULL, ADDRESS1 varchar NOT NULL, ADDRESS2 varchar NOT NULL, PRIMARY KEY (ID), FOREIGN KEY (EMPLOYEE_ID) REFERENCES EMPLOYEE(ID) );
Trong SQL Server / Oracle:
CREATE TABLE EMPLOYEE_ADDRESS ( ID int NOT NULL PRIMARY KEY, ADDRESS1 varchar NOT NULL, ADDRESS2 varchar NOT NULL, EMPLOYEE_ID int FOREIGN KEY REFERENCES EMPLOYEE(ID) );
Tạo khóa ngoại trong SQL khi bảng đã được tạo trước
Để tạo khóa ngoại khi các bảng đã được tạo sẵn, ta dùng cú pháp như sau, áp dụng cho MYSQL / SQL Server / Oracle
ALTER TABLE EMPLOYEE_ADDRESS ADD CONSTRAINT FK_EMPLOYEE_ID ADD FOREIGN KEY (ID) REFERENCES EMPLOYEE(ID)
Xóa khóa ngoại
Trong MYSQL
ALTER TABLE EMPLOYEE_ADDRESS DROP FOREIGN KEY FK_EMPLOYEE_ID;
Trong SQL Server / ORACLE
ALTER TABLE EMPLOYEE_ADDRESS DROP CONSTRAINT FK_EMPLOYEE_ID;
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của SmartData để nhận được nhiều hơn nữa: