1. Giới thiệu
SQL CHECK Constraint là một ràng buộc trong SQL được sử dụng để đảm bảo rằng các giá trị trong cột thỏa mãn một điều kiện cụ thể. Ràng buộc này giúp tăng cường tính toàn vẹn dữ liệu, bảo vệ cơ sở dữ liệu khỏi những giá trị không hợp lệ. Khi bạn tạo hoặc cập nhật một bản ghi, CHECK sẽ kiểm tra xem giá trị trong cột có thỏa mãn điều kiện hay không. Nếu không, câu lệnh sẽ bị từ chối.
Lưu ý: MySQL chỉ hỗ trợ CHECK từ phiên bản 8.0 trở đi. Trong các phiên bản trước đó, ràng buộc CHECK sẽ được chấp nhận nhưng không được thực thi.
2. Chức năng của SQL CHECK Constraint
Ràng buộc CHECK được sử dụng để:
- Đảm bảo rằng giá trị của một cột nằm trong một khoảng giá trị nhất định.
- Đảm bảo rằng dữ liệu trong cột tuân thủ một điều kiện logic cụ thể.
- Kiểm tra tính hợp lệ của dữ liệu trước khi lưu trữ trong bảng.
3. Cú pháp của SQL CHECK Constraint
Ràng buộc CHECK có thể được sử dụng khi tạo bảng hoặc thêm vào bảng đã tồn tại.
a. Thêm CHECK khi tạo bảng
CREATE TABLE table_name (
column_name datatype,
CHECK (condition)
);b. Thêm CHECK vào bảng đã tồn tại
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
CHECK (condition);4. Ví dụ về SQL CHECK Constraint
a. Ví dụ 1: Tạo bảng với ràng buộc CHECK
Trong ví dụ này, chúng ta sẽ tạo bảng employees và đảm bảo rằng giá trị của cột salary lớn hơn 0, nghĩa là không thể có mức lương âm.
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
salary DECIMAL(10, 2),
CHECK (salary > 0)
);- Trong bảng
employees, ràng buộcCHECKđảm bảo rằng mức lương của nhân viên (salary) luôn lớn hơn 0.
b. Ví dụ 2: Tạo bảng với nhiều ràng buộc CHECK
Trong ví dụ này, chúng ta sẽ tạo bảng products và áp dụng nhiều ràng buộc CHECK khác nhau.
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100),
price DECIMAL(10, 2),
quantity INT,
CHECK (price >= 0),
CHECK (quantity >= 0)
);- Ràng buộc
CHECKtrong bảngproductsđảm bảo rằng giá của sản phẩm (price) không được âm và số lượng sản phẩm (quantity) phải lớn hơn hoặc bằng 0.
c. Ví dụ 3: Thêm ràng buộc CHECK vào bảng đã tồn tại
Giả sử bạn có một bảng orders đã tồn tại và muốn thêm một ràng buộc để đảm bảo rằng tổng giá trị đơn hàng total_amount phải lớn hơn 0.
ALTER TABLE orders
ADD CONSTRAINT check_total_amount
CHECK (total_amount > 0);- Ràng buộc này đảm bảo rằng cột
total_amountkhông thể chứa giá trị nhỏ hơn hoặc bằng 0.
d. Ví dụ 4: Sử dụng CHECK với nhiều điều kiện logic
Trong ví dụ này, chúng ta sẽ sử dụng ràng buộc CHECK để đảm bảo rằng nhân viên phải làm việc trong một phòng ban hợp lệ.
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department VARCHAR(50),
CHECK (department IN ('Sales', 'HR', 'IT', 'Marketing'))
);- Ràng buộc
CHECKnày đảm bảo rằng giá trị của cộtdepartmentchỉ có thể nằm trong một trong các phòng ban hợp lệ:'Sales','HR','IT','Marketing'.
5. Một số lưu ý khi sử dụng SQL CHECK Constraint
a. Sự hỗ trợ của MySQL
- MySQL 8.0 trở lên: MySQL chỉ bắt đầu hỗ trợ thực thi ràng buộc
CHECKtừ phiên bản 8.0. Trong các phiên bản trước đó, câu lệnhCHECKsẽ được chấp nhận nhưng không có hiệu lực.
b. Đảm bảo tính logic trong điều kiện CHECK
- Các điều kiện trong
CHECKphải hợp lý và không gây xung đột với các giá trị đã có trong cơ sở dữ liệu. Ví dụ, nếu dữ liệu hiện có chứa giá trị âm cho mức lương và bạn thêm ràng buộcCHECK (salary > 0), MySQL sẽ từ chối thêm ràng buộc này.
c. Kết hợp nhiều CHECK
- Bạn có thể sử dụng nhiều ràng buộc
CHECKtrên các cột khác nhau trong một bảng. Mỗi ràng buộcCHECKsẽ được kiểm tra độc lập với các ràng buộc khác.
6. Xóa ràng buộc CHECK
Để xóa một ràng buộc CHECK, bạn có thể sử dụng câu lệnh ALTER TABLE như sau:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;Ví dụ: Xóa ràng buộc CHECK trong bảng employees
ALTER TABLE employees
DROP CONSTRAINT check_salary;Câu lệnh này sẽ xóa ràng buộc CHECK đảm bảo rằng lương phải lớn hơn 0.
Kết luận
SQL CHECK Constraint là một công cụ mạnh mẽ giúp đảm bảo tính hợp lệ của dữ liệu trong cơ sở dữ liệu bằng cách đặt ra các điều kiện logic mà dữ liệu phải tuân thủ. Ràng buộc này rất hữu ích trong việc duy trì tính toàn vẹn của dữ liệu, chẳng hạn như đảm bảo giá trị không âm cho lương, giá cả, hoặc đảm bảo rằng dữ liệu nằm trong một tập hợp các giá trị hợp lệ.
Việc hiểu và sử dụng CHECK đúng cách sẽ giúp bạn xây dựng các bảng dữ liệu hiệu quả hơn và tránh việc nhập vào các giá trị không hợp lệ. Hãy thử áp dụng các ví dụ trên trong các bài tập và dự án thực tế để làm quen với cách sử dụng CHECK Constraint trong MySQL!









