Thứ Hai, 24 tháng 7, 2023

Ràng buộc CHECK trong SQL Server

Ở 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.

Mục lục

  • 1. CHECK trong SQL Server
  • 2. Tạo nhiều điều kiện ở CHECK
  • 3. Thêm CHECK ở lệnh ALTER TABLE
  • 4. Xóa ràng buộc 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.

1
2
3
4
5
6
7
8
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 [free tuts .net]

1
2
3
4
5
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.

1
2
INSERT INTO test.products(product_name, unit_price)
VALUES ('Awesome Free Bike', 0);

Lỗi xuất hiện như sau:

1
2
3
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.

1
2
3
4
5
6
7
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.

Không đăt tên
1
2
3
ALTER TABLE test.products
ADD discounted_price DEC(10,2)
CHECK(discounted_price > 0);

Có đặt tên
1
2
3
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é.

1
2
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:

1
2
ALTER TABLE test.products
NO CHECK CONSTRAINT valid_price
=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
Ràng buộc CHECK trong SQL Server, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master