WEB CƠ BẢN

Ràng buộc UNIQUE trong MySQL


1) Chức năng của ràng buộc UNIQUE

- Ràng buộc UNIQUE dùng để thiết lập việc dữ liệu trên các hàng (trong cái bảng) không được phép trùng nhau.

- Một ràng buộc UNIQUE có thể được thiết lập cho một cột hoặc một tập hợp các cột

⛔ Nếu chúng ta thiết lập ràng buộc UNIQUE cho một cột thì dữ liệu trên các hàng của cột đó tuyệt đối không được trùng nhau.

⛔ Nếu chúng ta thiết lập ràng buộc UNIQUE cho một tập hợp các cột thì dữ liệu trên các hàng của một tập hợp các cột đó tuyệt đối không được trùng nhau.

- Trên một cái bảng có thể có nhiều ràng buộc UNIQUE.

2) Cách tạo ràng buộc UNIQUE cho một cột

- Để thiết lập ràng buộc UNIQUE cho một cột nào đó thì trong quá trình tạo bảng, chúng ta chỉ cần thêm từ khóa UNIQUE nằm phía sau tên cột là xong.

Ví dụ:

- Đoạn mã bên dưới dùng để tạo một cái bảng Customer. Trong đó, hai cột CustomerName & City bị thiết lập ràng buộc UNIQUE. Điều đó có nghĩa là tên của các khách hàng không được trùng nhau, thành phố của các khách hàng không được trùng nhau.

CREATE TABLE Customers(
	CustomerID INT,
	CustomerName VARCHAR(255) UNIQUE,
	PhoneNumber INT,
	City VARCHAR(255) UNIQUE
);

3) Cách tạo ràng buộc UNIQUE cho một tập hợp các cột

- Để thiết lập ràng buộc UNIQUE cho một tập hợp các cột thì chúng ta sử dụng cú pháp như sau:

CONSTRAINT tên_ràng_buộc UNIQUE(column1, column2, column3, ....)

- Trong đó, cụm từ CONSTRAINT tên_ràng_buộc dùng để đặt tên cho ràng buộc, nếu chúng ta loại bỏ nó thì tên của cột column1 sẽ mặc định được sử dụng làm tên ràng buộc.

Ví dụ:

- Trong cái bảng Customers bên dưới, tôi có tạo một cái ràng buộc UNIQUE tên là Hello500 dựa trên hai cột CustomerName & City. Điều đó đồng nghĩa với việc bên trong cái bảng Customers không được phép tồn tại những khách hàng có cùng tên & cùng thành phố.

CREATE TABLE Customers(
	CustomerID INT,
	CustomerName VARCHAR(255),
	PhoneNumber INT,
	City VARCHAR(255),
	CONSTRAINT Hello500 UNIQUE(CustomerName,City)
);

- Lưu ý: Việc tạo ràng buộc UNIQUE cho một tập hợp các cột & tạo ràng buộc UNIQUE cho nhiều cột là hoàn toàn khác nhau, để hiểu tại sao lại như vậy thì các bạn vui lòng xem ví dụ bên dưới.

Ví dụ:
CREATE TABLE Customers(
	CustomerID INT,
	CustomerName VARCHAR(255),
	PhoneNumber INT,
	City VARCHAR(255),
	UNIQUE(CustomerName,City)
);
CREATE TABLE Customers(
	CustomerID INT,
	CustomerName VARCHAR(255) UNIQUE,
	PhoneNumber INT,
	City VARCHAR(255) UNIQUE
);

- Hai đoạn mã nằm ở phía trên dùng để tạo cái bảng Customers, chúng đều có ràng buộc UNIQUE liên quan đến hai cột CustomerName & City. Tuy nhiên, đối với đoạn mã thứ nhất thì bên trong cái bảng Customers có thể có nhiều khách hàng trùng tên, có thể có nhiều khách hàng trùng thành phố, chỉ riêng trường hợp không được phép tồn tại các khách trùng tên lẫn thành phố.

- Còn đối với đoạn mã thứ hai thì nó sẽ mang ý nghĩa là bên trong cái bảng Customers không được phép có các khách hàng trùng tên, không được phép có các khách hàng trùng thành phố.

- Cú pháp thiết lập ràng buộc UNIQUE cho một tập hợp các cột cũng có thể được dùng cho trường hợp thiết lập ràng buộc UNIQUE cho riêng một cột.

4) Thêm ràng buộc UNIQUE (khi bảng đã được tạo)

- Đối với trường hợp bảng đã được tạo trước đó, nhưng do quên thiết lập ràng buộc UNIQUE cho cột nên bây giờ các bạn muốn bổ sung, để làm được điều đó thì chúng ta sử dụng lệnh chỉnh sửa bảng như bên dưới.

ALTER TABLE table_name ADD CONSTRAINT tên_ràng_buộc UNIQUE(column1, column2, column3);

- Ví dụ, để bổ sung ràng buộc UNIQUE cho cột PhoneNumber (trong cái bảng Customers) thì tôi sử dụng câu lệnh như bên dưới.

ALTER TABLE Customers ADD UNIQUE(PhoneNumber);

5) Cách xóa một ràng buộc UNIQUE

- Dưới đây là cú pháp dùng để xóa một ràng buộc UNIQUE.

ALTER TABLE table_name DROP INDEX tên_ràng_buộc;

- Đối với trường hợp ràng buộc UNIQUE được thiết lập cho riêng một cột trong khi chúng ta không dùng cụm từ CONSTRAINT tên_ràng_buộc để đặt tên cho ràng buộc thì mặc định "tên ràng buộc" chính là tên của cái cột đó.