Ở các bài trước chúng ta đã tìm hiểu ràng buộc primary key và foreign key rồi, vậy thì trong bài này mình sẽ giới thiệu thêm một ràng buộc quan trọng trong SQL dùng để xử lý vấn đề bảo toàn ràng buộc toàn vẹn dữ liệu đó là UNIQUE.
Mục lục
- 1. UNIQUE trong SQL Server
- Thiết lập ngay column
- Thiết lập ở cuối các column
- Đặt tên cho UNIQUE
- 2. Phân biệt Primary Key với UNIQUE
- 3. Tạo UNIQUE cho nhiều column
- 4. Thêm UNIQUE bằng lệnh ALTER TABLE
- 5. Xóa UNIQUE
1. UNIQUE trong SQL Server
Ở bài học tạo bảng Create Table mình có giới thiệu sơ qua về một vài ràng buộc này rồi, tuy nhiên bài này chúng ta sẽ học kỹ hơn nhé.
UNIQUE là ràng buộc trên giá trị duy nhất trên column, có nghĩa là các dòng dữ liệu không được có giá trị trùng nhau ở column đó. Ràng buộc này giống như khóa chính vậy, vì bản chất nó cũng là một khóa.
Ví dụ trong bảng SINHVIEN sẽ có MASINHVIEN là khóa chính, và cột CMND sẽ là UNIQUE. Thực ra bạn cũng có thể lấy CMND là khoa chính nhưng như vậy sẽ không hay lắm.
Chúng ta có hai cách tạo UNIQUE như sau:
Thiết lập ngay column
Cách này bạn sẽ đặt từ khóa UNIQUE
ở cuối column muốn nó có giá trị không trùng lặp.
1 2 3 4 5 6 | CREATE TABLE hr.persons( person_id INT IDENTITY PRIMARY KEY , first_name VARCHAR (255) NOT NULL , last_name VARCHAR (255) NOT NULL , email VARCHAR (255) UNIQUE ); |
Column email là UNIQUE.
Thiết lập ở cuối các column
Trường hợp này bạn đặt UNIQUE (column_list)
ở cuối lệnh Create Table, nếu có nhiều column thì cách nhau bởi dấu phẩy.
1 2 3 4 5 6 7 | CREATE TABLE hr.persons( person_id INT IDENTITY PRIMARY KEY , first_name VARCHAR (255) NOT NULL , last_name VARCHAR (255) NOT NULL , email VARCHAR (255), UNIQUE (email) ); |
SQL Server sẽ tự động tạo ra một INDEX UNIQUE và chạy nó mỗi khi bạn thực hiện thao tác INSERT
hoặc UPDATE
, nếu bạn cập nhật dữ liệu bị trùng thì nó sẽ thông báo lỗi.
Hãy thử chạy hai câu lệnh INSERT
dưới đây để xem có đúng không nhé.
1 2 | INSERT INTO hr.persons(first_name, last_name) VALUES ( 'John' , 'Smith' ); |
Lệnh 1 này hoạt động bình thường.
1 2 | INSERT INTO hr.persons(first_name, last_name, email) VALUES ( 'Jane' , 'Doe' , 'j.doe@bike.stores' ); |
Lệnh 2 sẽ bị báo lỗi vì cột email bị trùng.
1 2 3 | Violation of UNIQUE KEY constraint 'UQ__persons__AB6E616417240E4E'. Cannot insert duplicate key in object 'hr.persons'. The duplicate key value is (j.doe@bike.stores). |
Đặt tên cho UNIQUE
Cái tên UQ__persons__AB6E616417240E4E
là do SQL Server tự sinh ra vì bạn không đặt tên cho UNIQUE, nếu bạn muốn đặt tên thì hãy sử dụng từ khóa CONSTRAINT.
1 2 3 4 5 6 7 | CREATE TABLE hr.persons ( person_id INT IDENTITY PRIMARY KEY , first_name VARCHAR (255) NOT NULL , last_name VARCHAR (255) NOT NULL , email VARCHAR (255), CONSTRAINT unique_email UNIQUE (email) ); |
Tại sao chúng ta cần đặt tên? Như bạn thấy khi nhận được thông báo lỗi thì ta sẽ dễ dàng biết được do đâu, thứ hai nữa bạn dễ dàng thay đổi khi sử dụng kết hợp với lệnh ALTER TABLE.
2. Phân biệt Primary Key với UNIQUE
Bạn nên phân biệt rõ hai ràng buộc này nhé.
- Primary Key là khóa chính của bảng, đây là index đặc biệt nên bạn không chấp nhận giá trị NULL
- UNIQUE cũng là một khóa nhưng vì là một column bình thường nên có thể nhận giá trị NULL.
NULL cũng là một giá trị bình thường nên khi có 2 record đều NULL thì vẫn bị lỗi duplicate value nhé.
3. Tạo UNIQUE cho nhiều column
Để tạo UNIQUE cho nhiều column thì bạn phải sử dụng cách thứ hai đó là thiết lập ở cuối các column, cú pháp như sau:
1 2 3 4 5 6 7 8 | CREATE TABLE table_name ( key_column data_type PRIMARY KEY , column1 data_type, column2 data_type, column3 data_type, ..., UNIQUE (column1,column2) ); |
Ví dụ dưới đây tạo UNIQUE
cho hai column person_id
và skill_id
.
1 2 3 4 5 6 7 | CREATE TABLE hr.person_skills ( id INT IDENTITY PRIMARY KEY , person_id int , skill_id int , updated_at DATETIME, UNIQUE (person_id, skill_id) ); |
4. Thêm UNIQUE bằng lệnh ALTER TABLE
Khi bạn đã tạo xong table rồi nhưng sau đó muốn bổ sung UNIQUE
cho một field nào đó thì hãy sử dụng lệnh ALTER TABLE
, cú pháp như sau:
1 2 3 | ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column1, column2,...); |
Ví dụ: Giả sử ta có table như sau.
1 2 3 4 5 6 7 | CREATE TABLE hr.persons ( person_id INT IDENTITY PRIMARY KEY , first_name VARCHAR (255) NOT NULL , last_name VARCHAR (255) NOT NULL , email VARCHAR (255), phone VARCHAR (20), ); |
Bây giờ mình sẽ bổ sung UNIQUE
cho hai column email
và phone
.
1 2 3 4 5 | ALTER TABLE hr.persons ADD CONSTRAINT unique_email UNIQUE (email); ALTER TABLE hr.persons ADD CONSTRAINT unique_phone UNIQUE (phone); |
5. Xóa UNIQUE
UNIQUE cũng là một constraint nên bạn hoàn toàn có thể sử dụng lệnh DROP CONSTRAINT
để xóa.
1 2 | ALTER TABLE table_name DROP CONSTRAINT constraint_name; |
Ví dụ: Xóa unique có tên là unique_phone
ra khỏi bảng hr.persons
.
1 2 | ALTER TABLE hr.persons DROP CONSTRAINT unique_phone; |
* 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
=============================
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