Ở bài trước chúng ta đã tìm hiểu ràng buộc UNIQUE rồi, vậy thì trong bài này mình sẽ giới thiệu ràng một ràng buộc khác cũng rất quan trọng trước khi đi qua phần khác đó là CHECK.
1. CHECK trong SQL Server
CHECK là ràng buộc miền giá trị, nghĩa là nó chỉ giá trị của bạn nhập vào chỉ nằm trong một phạm vi nhất định. Ví dụ column DIEMTHI thì phải nằm trong khoảng [0, 10], giới tính thì phải là {“Nam”, ‘Nữ’}.
Hãy xem ví dụ mình tạo ràng buộc giá của sản phẩm phải lớn hơn 0 như sau.
CREATE SCHEMA test; GO CREATE TABLE test.products( product_id INT IDENTITY PRIMARY KEY, product_name VARCHAR(255) NOT NULL, unit_price DEC(10,2) CHECK(unit_price > 0) );
Nếu bạn muốn đặt tên cho CHECK để sau này dễ quản lý thì hãy xem ví dụ sau.
Bài viết này được đăng tại [kiso.vn]
CREATE TABLE test.products( product_id INT IDENTITY PRIMARY KEY, product_name VARCHAR(255) NOT NULL, unit_price DEC(10,2) CONSTRAINT positive_price CHECK(unit_price > 0) );
Với cách này thì bạn dễ dàng thay đổi CHECK bằng lệnh ALTER TABLE
.
Nếu bạn cố tình nhập sai dữ liệu như ví dụ dưới đây thì sẽ bị báo lỗi.
INSERT INTO test.products(product_name, unit_price) VALUES ('Awesome Free Bike', 0);
Lỗi xuất hiện như sau:
The INSERT statement conflicted with the CHECK constraint "positive_price". The conflict occurred in database "BikeStores", table "test.products", column 'unit_price'.
Lưu ý: Trong ví dụ này price vẫn chấp nhận giá trị NULL vì trong SQL Server NULL và 0 là hai giá trị khác nhau.
2. Tạo nhiều điều kiện ở CHECK
Nếu bạn muốn tạo nhiều điều kiện ở CHECK thì hãy sử dụng toán tử AND để nối các điều kiện với nhau.
CREATE TABLE test.products( product_id INT IDENTITY PRIMARY KEY, product_name VARCHAR(255) NOT NULL, unit_price DEC(10,2), discounted_price DEC(10,2), CHECK(unit_price > 0), CHECK(discounted_price > 0 AND discounted_price > unit_price)
3. Thêm CHECK ở lệnh ALTER TABLE
Nếu bạn tạo table rồi nhưng quên tạo CHECK thì có thể sử dụng lệnh ALTER TABLE.
ALTER TABLE test.products ADD discounted_price DEC(10,2) CHECK(discounted_price > 0);
ALTER TABLE test.products ADD CONSTRAINT valid_price CHECK(unit_price > discounted_price);
4. Xóa ràng buộc CHECK
Nếu bạn muốn xóa CHECK
thì hãy sử dụng lệnh ALTER TABLE
kết hợp DROP CONSTRAINT
nhé.
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
Nếu bạn không muốn xóa mà tạm thời vô hiệu hóa nó thì hãy sử dụng lệnh sau:
ALTER TABLE test.products NO CHECK CONSTRAINT valid_price
Bài viết liên quan
[CSF-2] Một số thiết lập CSF, LFD
Hôm nay mình sẽ thực hiện một số thiết lập trên CSF Mở file config để sửa đổi một số tính năng dưới /etc/csf/csf.conf Nội dung chính1. CHECK trong SQL Server2. Tạo nhiều điều kiện...
[CSF-1] Tăng bảo mật Server với ConfigServer Firewall (CSF)
Nội dung chính1. CHECK trong SQL Server2. Tạo nhiều điều kiện ở CHECK3. Thêm CHECK ở lệnh ALTER TABLE4. Xóa ràng buộc CHECK1. Khái niệm CSF: CSF (ConfigServer & Firewall) là một bộ ứng dụng...
Sử dụng SSH Key với Gitlab và Github
Bài viết này mình sẽ hướng dẫn các bạn tạo ssh key cho Gitlab và Github SSH là gì? Secure Socket Shell là một giao thức mạng dùng để thiết lập kết nối mạng một...
Directory traversal vulnerabilities (phần 4)
Nội dung chính1. CHECK trong SQL Server2. Tạo nhiều điều kiện ở CHECK3. Thêm CHECK ở lệnh ALTER TABLE4. Xóa ràng buộc CHECKV. Phân tích và khai thác các lỗ hổng Directory traversal (tiếp) 5....
Directory traversal vulnerabilities (phần 3)
Nội dung chính1. CHECK trong SQL Server2. Tạo nhiều điều kiện ở CHECK3. Thêm CHECK ở lệnh ALTER TABLE4. Xóa ràng buộc CHECKV. Phân tích và khai thác các lỗ hổng Directory traversal 1. Lỗ...
Directory traversal vulnerabilities (phần 2)
Nội dung chính1. CHECK trong SQL Server2. Tạo nhiều điều kiện ở CHECK3. Thêm CHECK ở lệnh ALTER TABLE4. Xóa ràng buộc CHECKIII. Vì sao lỗ hổng Directory traversal xuất hiện? Với mỗi ngôn ngữ...