Trong bài tạo khóa chính Primary Key mình đã nói rằng trong một bảng sẽ tồn tại một khóa chính (có thể có nhiều fields) và giá trị của nó sẽ là duy nhất, nghĩa là dữ liệu sẽ không được trùng lặp. Vậy thì UNIQUE
cũng có tính chất tương tự như vậy, tức là nếu bạn xác định một field nào đó là UNIQUE dữ liệu của mỗi record không được trùng lặp nhau.
Vậy sự khác nhau giữa Primary Key và Unique là gì? Để trả lời ta sẽ tìm hiểu cú pháp tạo Unique trong MySQL đã nhé.
Mục lục
- 1. Unique trong MySQL
- 2. Tạo UNIQUE trong MySQL
- Tạo trong lệnh tạo bảng
- Sử dụng Alter Table để tạo
- Sử dụng CONSTRAINT để tạo tên cho UNIQUE
- 3. Xóa (Drop) Unique trong MySQL
- 4. Lời kết
1. Unique trong MySQL
UNIQUE
thực chất là một index KEY
nên khi bạn thiết lập một field nào đó là UNIQUE
thì việc truy vấn dữ liệu trên field đó sẽ nhanh hơn. Nó được dùng trong trường hợp bạn muốn tạo thêm một field có giá trị là duy nhất.
Ví dụ trong bảng Users gồm các fields như sau: Users(id, username, email) thì với id
ta sẽ chọn làm khóa chính. Nhưng mà tôi muốn email và username của người dùng phải là duy nhất, nghĩa là người dùng không được sử dụng một email
hoặc username
để đăng ký nhiều tài khoản. Để giải quyết thì ta sẽ thiết lập cho hai fields này là UNIQUE
.
Bài viết này được đăng tại tranvanbinh.vn
Như vậy sự khác biệt giữa UNIQUE
và Primary Key
là:
-
Primary Key
có cấp cao hơnUNIQUE
, nó thường dùng để phân biệt giữa các record. - Trong mỗi bảng chỉ có có một
Primary Key
, cònUNIQUE
thì có thể có nhiều
2. Tạo UNIQUE trong MySQL
Để tạo UNIQUE ta có hai cách, cách thứ nhất là tạo trực tiếp trong lệnh CREATE TABLE và cách thứ hai là sử dụng lệnh ALTER TABLE
.
Tạo trong lệnh tạo bảng
Chúng ta sẽ thêm từ khóa UNIQUE
vào field mà ban muốn thiết lập nó là UNIQUE
.
1 2 3 4 5 | CREATE TABLE Users( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR (50) NOT NULL UNIQUE , email VARCHAR (50) NOT NULL UNIQUE ); |
Hoặc ta có thể thêm nó ở dưới danh sách các fields (giống Primary Key).
1 2 3 4 5 6 7 | CREATE TABLE Users( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR (50) NOT NULL , email VARCHAR (50) NOT NULL , UNIQUE (username), UNIQUE (email) ); |
Sử dụng Alter Table để tạo
Trong trường hợp này chúng ta sẽ tạo bảng trước, sau đó sử dụng lệnh Alter Table
để thêm UNIQUE
.
1 2 3 4 5 6 7 8 | CREATE TABLE Users( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR (50) NOT NULL , email VARCHAR (50) NOT NULL ); ALTER TABLE Users ADD UNIQUE (username); ALTER TABLE Users ADD UNIQUE (email); |
Sử dụng CONSTRAINT để tạo tên cho UNIQUE
Cách này khuyến khích sử dụng vì mỗi index chúng ta nên đặt cho nó một cái tên để sau này muốn thực hiện thao tác delete unique thì sẽ dựa vào tên constraint đó. Ví dụ:
1 2 3 4 5 6 7 | CREATE TABLE Users( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR (50) NOT NULL , email VARCHAR (50) NOT NULL , CONSTRAINT user_unique UNIQUE (username), CONSTRAINT email_unique UNIQUE (email) ); |
1 | ALTER TABLE Users ADD CONSTRAINT user_unique UNIQUE (username) |
3. Xóa (Drop) Unique trong MySQL
Sau khi tạo UNIQUE
xong nếu bạn muốn bỏ nó đi thì sẽ sử dụng lệnh ALTER TABLE
kết hợp với DROP
. Tuy nhiên để xóa UNIQE
nào thì chúng ta phải biết được tên của nó, vì vậy ta nên dùng CONSTRAINT
để tạo unique nhé. Sau đây là ví dụ xóa UNIQUE
.
1 | ALTER TABLE Users DROP INDEX user_unique |
Các bạn lưu ý chữ thường chính là các chỗ bạn sẽ đổi còn chữ hoa là các keyword nên không được đổi nhé.
4. Lời kết
Bài này chủ yếu hướng dẫn cách tạo UNIQUE
trong MYSQL
và phân biệt nó với Primary Key
, đây cũng là một dạng chỉ mục đóng vai trò rất quan trọng trong việc tối ưu hóa truy vấn. Bài này mình dừng ở đây, bài tiếp theo mình sẽ trình bày về thiết lập tăng tự động cho khóa chính (auto increment).
* 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