SQL Series 4- Các loại ràng buộc trong SQL (Phần 1): Ràng buộc khóa chính, khóa ngoại
Các ràng buộc được sử dụng để giới hạn loại dữ liệu có thể đi vào trong một bảng. Điều này đảm bảo tính chính xác và độ tin cậy của dữ liệu trong một bảng. Nếu có bất kỳ vi phạm nào giữa ràng buộc và hành động dữ liệu, hành động đó sẽ bị hủy bỏ.
- Cách tạo bảng trong SQL
- Tích hợp ChatGPT và SQL: Tiến bộ và cơ hội trong nhận dạng giọng nói dựa trên AI
- ChatGPT và SQL: Hỗ trợ Sức khỏe Tâm thần thông qua Trí tuệ Nhân tạo
- SQL Series 6- Các loại ràng buộc trong SQL (Phần 2): Not Null, Unique, Default, Check
- SQL Series 5- Bài tập thực hành tạo cơ sở dữ liệu và các bảng
Table of Contents
1. Khái niệm về Ràng buộc trong SQL
Các ràng buộc trong SQL được sử dụng để chỉ định các quy tắc cho dữ liệu trong một bảng.
Các ràng buộc được sử dụng để giới hạn loại dữ liệu có thể đi vào trong một bảng. Điều này đảm bảo tính chính xác và độ tin cậy của dữ liệu trong một bảng. Nếu có bất kỳ vi phạm nào giữa ràng buộc và hành động dữ liệu, hành động đó sẽ bị hủy bỏ.
2. Các loại ràng buộc thông dụng
SQL cung cấp một số loại ràng buộc thông dụng như:
- NOT NULL: Đảm bảo dữ liệu không được rỗng hay khuyết
- UNIQUE: Đảm bảo dữ liệu ở một trường không được lặp lại trong các bản ghi của cùng một bảng
- DEFAULT: Đặt giá trị mặc định cho một cột nếu không có giá trị nào được chỉ định(khi chèn dữ liệu)
- CHECK: Đảm bảo rằng các giá trị trong một cột thỏa mãn một điều kiện cụ thể
- PRIMARY KEY: đảm bảo giá trị dữ liệu của một trường là duy nhất và không được null, dùng làm định danh cho bản ghi trong bảng
- FOREIGN KEY: đảm bảo mối liên kết với một bản ghi trong bảng khác, giá trị của trường khoá ngoại phải tương ứng với giá trị một trường khoá chính ở bảng khác
- CREATE INDEX:Dùng để tạo và lấy dữ liệu từ cơ sở dữ liệu nhanh chóng
>>> Xem thêm: SQL Series 5- Bài tập thực hành tạo cơ sở dữ liệu và các bảng
3. Cách khai báo ràng buộc
Các ràng buộc có thể được khai báo qua lúc khởi tạo bảng với câu lệnh CREATE TABLE hoặc sau khi đã tạo bảng với câu lệnh ALTER TABLE
Cú pháp cơ bản với tạo bảng:
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
….
);
4. Ràng buộc Khóa chính (PRIMARY KEY)
Ràng buộc khoá chính (primary key constraint) đảm bảo giá trị dữ liệu của một trường là duy nhất và không được null, dùng làm định danh cho bản ghi trong bảng.
4.1 Thêm khóa chính khi tạo bảng
Trường hợp bảng có duy nhất một trường làm khóa chính:
MySQL | SQL Server / Oracle / MS Access |
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, PRIMARY KEY (ID) ); |
CREATE TABLE Persons ( ID int NOT NULL PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int ); |
Trường hợp bảng có nhiều trường kết hợp làm khóa chính hay còn gọi là composite primary key:
MySQL / SQL Server / Oracle / MS Access |
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CONSTRAINT PK_Person PRIMARY KEY (ID,LastName) ); |
Lưu ý: cú pháp trên cũng có thể dùng để định nghĩa tên của ràng buộc.
4.2 Thêm khóa chính sau khi đã tạo bảng
Ta muốn thêm khóa chính sau khi đã tạo bảng thì có thể sử dụng từ khóa ALTER TABLE.
MySQL / SQL Server / Oracle / MS Access (cơ bản) |
MySQL / SQL Server / Oracle / MS Access (đặt tên khóa chính+ đặt khóa chính có nhiều trường) |
ALTER TABLE Persons |
ALTER TABLE Persons ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName); |
Lưu ý: Nếu bạn sử dụng ALTER TABLE để thêm khóa chính , các cột khóa chính phải được khai báo là không chứa giá trị NULL (khi bảng được tạo lần đầu tiên)
4.3 Xóa ràng buộc khóa chính
MySQL | SQL Server / Oracle / MS Access |
ALTER TABLE Persons DROP PRIMARY KEY; |
ALTER TABLE Persons DROP CONSTRAINT PK_Person; |
>>> Xem thêm: SQL Series 3- Ý nghĩa các từ khóa trong SQL
5. Ràng buộc khóa ngoại(Foreign Key)
Ràng buộc khoá ngoại (foreign key constraint) đảm bảo mối liên kết với một bản ghi trong bảng khác, giá trị của trường khoá ngoại phải tương ứng với giá trị một trường khoá chính ở bảng khác.
Bảng có khóa ngoại được gọi là bảng con và bảng có khóa chính được gọi là bảng được tham chiếu hoặc bảng cha.
Giả sử chúng ta có 2 bảng sau :
PersonID | LastName | FirstName | Age |
---|---|---|---|
1 | Hansen | Ola | 30 |
2 | Svendson | Tove | 23 |
3 | Pettersen | Kari | 20 |
OrderID | OrderNumber | PersonID |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
Ràng buộc FOREIGN KEY ngăn không cho dữ liệu không hợp lệ được chèn vào cột khóa ngoại, bởi vì nó phải là một trong các giá trị có trong bảng cha.
Lưu ý rằng cột “PersonID” trong bảng “Orders” tham chiếu tới cột “PersonID” trong bảng “Persons”.
Cột “PersonID” trong bảng “Persons” là KHÓA CHÍNH của bảng “Persons”.
Cột “PersonID” trong bảng “Orders” là một KHÓA NGOẠI của bảng “Orders”.
5.1 Thêm khóa ngoại khi tạo bảng
MYSQL | SQL Server / Oracle / MS Access |
CREATE TABLE Orders ( OrderID int NOT NULL, OrderNumber int NOT NULL, PersonID int, PRIMARY KEY (OrderID), FOREIGN KEY (PersonID) REFERENCES Persons(PersonID) ); |
CREATE TABLE Orders ( FOREIGN KEY REFERENCES Persons(PersonID) |
5.2 Thêm khóa ngoại sau khi đã tạo bảng
Ta muốn thêm khóa ngoại sau khi đã tạo bảng thì có thể sử dụng từ khóa ALTER TABLE.
MySQL / SQL Server / Oracle / MS Access (cơ bản) |
MySQL / SQL Server / Oracle / MS Access (đặt tên khóa ngoại+khóa ngoại có nhiều trường) |
ALTER TABLE Orders |
ALTER TABLE Orders ADD CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID) REFERENCES Persons(PersonID); |
5.3 Xóa ràng buộc khóa ngoại
MySQL | SQL Server / Oracle / MS Access |
ALTER TABLE Orders DROP FOREIGN KEY FK_PersonOrder; |
ALTER TABLE Orders DROP CONSTRAINT FK_PersonOrder; |
6. Sự khác nhau giữa KHÓA CHÍNH và KHÓA NGOẠI
Khóa chính | Khóa ngoại |
---|---|
Khóa chính xác định duy nhất một bản ghi trong bảng. | Khóa ngoại là một trường trong bảng và là khóa chính trong một bảng khác. |
Khóa chính không chấp nhận các giá trị rỗng. | Khóa ngoại có thể chấp nhận nhiều giá trị rỗng. |
Theo mặc định, khoá chính là chỉ mục được nhóm và dữ liệu trong bảng cơ sở dữ liệu được tổ chức theo thứ tự của dãy chỉ mục nhóm. | Khóa ngoại không tự động tạo ra một chỉ mục, nhóm hoặc không nhóm. Bạn có thể tự tạo một chỉ mục trên khoá ngoại. |
Chúng ta chỉ có thể có một khóa chính trong một bảng. | Chúng ta có thể có nhiều khoá ngoại trong một bảng. |
>>> Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:
>>> Bài viết liên quan:
SQL Series 1- Hướng dẫn cơ bản về cách thao tác với Bảng trong CSDL(SQL)
SQL Series 2- Cách thao tác với dữ liệu của bảng trong CSDL(SQL)
SQL Series 3- Ý nghĩa các từ khóa trong SQL
SQL Series 4- Các loại ràng buộc trong SQL (Phần 1): Ràng buộc khóa chính, khóa ngoại
SQL Series 5- Bài tập thực hành tạo cơ sở dữ liệu và các bảng
Nguồn & Tài liệu tham khảo
- https://www.educba.com/primary-key-vs-foreign-key/
- https://www.w3schools.com/sql/sql_constraints.asp
- https://viblo.asia/p/khac-biet-giua-khoa-chinh-va-khoa-ngoai-trong-sql-924lJMdWZPM
- Ý nghĩa các từ khóa trong sql
Học viên Phạm Tuấn Vũ
Bình luận (0
)