Unique là là một loại giá trị mà bạn sẽ rất hay gặp khi làm việc với SQL. Bài viết này hãy cùng SmartData đi tìm hiểu giá trị Unique trong SQL là gì và chúng có ý nghĩa như thế nào nhé.
Ràng buộc UNIQUE trong SQL
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, tuy nhiên khác nhau ở chỗ ràng buộc UNIQUE sẽ chỉ chấp nhận thêm 1 giá trị NULL và nó không thể trùng lặp.
Ví dụ: trong bảng NHANVIEN sẽ có MANHANVIEN là khóa chính, và cột CCCD sẽ là UNIQUE. Về mặt logic bạn cũng có thể lấy CCCD là khoa chính nhưng như vậy sẽ không hay lắm cho việc phát triển về sau.
Tạo ràng buộc UNIQUE
- Tạo ràng buộc UNIQUE khi tạo bảng:
CREATE TABLE persons( person_id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255), UNIQUE(email) );
- Tạo ràng buộc UNIQUE sau khi tạo bảng:
ALTER TABLE persons ADD CONSTRAINT unique_email UNIQUE (email);
Ta thực hiện các câu lệnh sau và nhận kết quả
INSERT INTO persons(first_name, last_name, email) VALUES('Nguyen','Nghiep', 'nghiepnv@gmail.com');
Lệnh 1 vẫn hoạt động và cho ta kết quả:
Ta thực hiện tiếp lệnh 2:
INSERT INTO persons(first_name, last_name, email) VALUES('Nguyen1','Nghiep1', 'nghiepnv@gamil.com');
Lệnh 2 bị lỗi giá trị email bị trùng như sau
- Ngoài ra chúng ta có thể tạo UNIQUE trên nhiều column với cú pháp
CREATE TABLE table_name ( key_column data_type PRIMARY KEY, column1 data_type, column2 data_type, column3 data_type, ..., UNIQUE (column1,column2) );
Ví dụ tạo UNIQUE cho 2 column person_id và skill_id
CREATE TABLE hr.person_skills ( id INT IDENTITY PRIMARY KEY, person_id int, skill_id int, updated_at DATETIME, UNIQUE (person_id, skill_id) );
Tổng kết
Bài viết trên SmartData đã giới thiệu với các bạn về giá trị Unique trong SQL
Nếu bạn là newbie có thể tham khảo bài viết này để tìm hiểu lộ trình học DA trong 6 tháng của SmartData
Nếu bạn thấy bài viết hay và hữu ích, bạn có thể tham gia các kênh sau của SmartData để nhận được nhiều hơn nữa: