Ta đang làm việc với cơ sở dữ liệu quan hệ mà điều tạo nên quan hệ giữa các bảng đó chính là khóa ngoại, nó giúp dễ dàng xác định những kết nối khác nhau tồn tại trong một hệ thống quản lý database.
Trong bài viết dưới đây, SmartData sẽ chia sẻ những kiến thức cơ bản cần biết về tác dụng của khóa ngoại trong SQL.
Khóa ngoại (Foreign Key)
Các bảng trong database không tồn tại độc lập mà chúng còn có thể tồn tại mối quan hệ với nhau về mặt dữ liệu
Mối quan hệ này được thể hiện thông qua ràng buộc giá trị dữ liệu xuất hiện ở bảng này thì xuất hiện trước ở một bảng khác
Điều này làm đảm bảo được tính đúng đắn và hợp lệ của dữ liệu trong database.
So sánh khóa chính và khóa ngoại
Điều kiện để tạo khóa ngoại
Trường dùng làm khóa ngoại tham chiếu đến khóa chính của table khác, đảm bảo các ràng buộc UNIQUE, NOT NULL tương tự khóa chính.
Trường dùng làm Khóa ngoại phải có cùng kiểu dữ liệu, cùng số lượng trường có sắp xếp tương ứng khóa chính.
Thao tác với khóa ngoại
- Tạo khóa ngoại trong lúc tạo bảng
Cú pháp:
CREATE TABLE <Table Foreign> ( <column1> <kiểu dữ liệu>, <column2> <kiểu dữ liệu>, … <columnn> <kiểu dữ liệu> FOREIGN KEY (<ColumnF, ColumnF1, ColumnF2,…>) REFERENCES <Table Key> (<ColumnK, ColumnK1, ColumnK2,…>) [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT | RESTRICT} ] [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] )
Giải thích:
ON DELETE: Tùy chọn. Cho biết sẽ làm gì với dữ liệu con khi dữ liệu mẹ bị xóa. Có các lựa chọn NO ACTION, CASCADE, SET NULL và SET DEFAULT.
ON DELETE RESTRICT: Không cho xóa hàng khi còn có tham chiếu tới, ở đây nghĩa là dữ liệu ở bảng mẹ bị xóa thì dữ liệu tham chiếu ở bảng con không bị xóa theo
ON UPDATE: Tùy chọn. Cho biết sẽ làm gì với dữ liệu con khi dữ liệu mẹ được cập nhật. Có các lựa chọn NO ACTION, CASCADE, SET NULL và SET DEFAULT.
NO ACTION: Dùng với ON DELETE hoặc ON UPDATE, nghĩa là không làm gì với dữ liệu con khi dữ liệu mẹ bị xóa hoặc cập nhật.
CASCADE: Dùng với ON DELETE hoặc ON UPDATE, nghĩa là dữ liệu con bị xóa hoặc cập nhật khi dữ liệu mẹ bị xóa hoặc cập nhật.
SET NULL: Dùng với ON DELETE hoặc ON UPDATE, nghĩa là dữ liệu con được đặt là NULL khi dữ liệu mẹ bị xóa hoặc cập nhật.
SET DEFAULT: Dùng với ON DELETE hoặc ON UPDATE, nghĩa là dữ liệu con được đặt thành giá trị mặc định khi dữ liệu mẹ bị xóa hoặc cập nhật.
Ví dụ:
CREATE TABLE sanpham (id_sanpham INT PRIMARY KEY, ten_sanpham VARCHAR(50) NOT NULL, phan_loai VARCHAR(25) ); CREATE TABLE hangtonkho ( id_hangtonkho INT PRIMARY KEY, id_sanpham INT NOT NULL, soluong INT, luong_toithieu INT, luong_toida INT, CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham) );
Trong ví dụ trên: Chúng ta tạo bảng mẹ là bảng sanpham có khóa chính gồm các trường trong id_sanpham. Tiếp theo là tạo bảng con hangtonkho. Sau đó tạo bảng hangtonkho có tên là fk_htk_id_sanpham. Khóa ngoại hình thành mối liên kết giữa cột id_sanpham trong bảng hangtonkho và id_sanpham trong bảng sanpham.
- Tạo khóa ngoại sau khi tạo bảng
Cú pháp:
ALTER TABLE <Table Foreign> ADD FOREIGN KEY(<ColumnF, ColumnF1, ColumnF2,…>) REFERENCES <Table Key> (<ColumnK, ColumnK1, ColumnK2,…>)
Ví dụ:
ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_sanpham FOREIGN KEY (ten_sanpham, diadiem) REFERENCES sanpham (ten_sanpham, diadiem);
Trong ví dụ trên ngoài việc tạo khóa ngoại sau khi đã tạo bảng, chúng ta còn thực hiện tạo khóa ngoại có nhiều hơn 1 trường thông tin. Ở đây bảng mẹ sanpham có khóa chính gồm 2 cột là ten_sanpham và diadiem. Bảng con và khóa ngoại phải tham chiếu tới 2 cột này.
Kết luận
Thông qua bài viết này, chúng ta đã tìm hiểu được thêm kiến thức cơ bản của phần khóa ngoại trong cơ sở dữ liệu quan hệ. Điều tạo nên mối quan hệ mật thiết giữa dữ liệu trong các bảng với nhau. Để theo dõi thêm các kiến thức khác về SQL, bạn có thể tìm đọc những bài viết khác trong seri