Tạo UNIQUE KEY kết hợp cột ID và DATE trong MySQL
Đảm bảo một client không thể có 2 dự án với cùng deadline (ngày) bằng UNIQUE KEY trên (Client_Id, ClientProjectDeadline).
Cú pháp
CREATE TABLE yourTableName (
yourIdColumnName dataType,
yourDateColumnName dataType,
...
UNIQUE KEY(yourIdColumnName, yourDateColumnName)
);
Ví dụ hoàn chỉnh
Tạo bảng:
mysql> CREATE TABLE keyReferringToDateDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Client_Id INT,
-> ClientProjectDeadline DATE,
-> ClientName VARCHAR(100),
-> ClientAge INT,
-> ClientCountryName VARCHAR(20),
-> UNIQUE KEY(Client_Id, ClientProjectDeadline)
-> );
Kiểm tra cấu trúc (SHOW CREATE TABLE):
CREATE TABLE `keyreferringtodatedemo` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Client_Id` int(11) DEFAULT NULL, `ClientProjectDeadline` date DEFAULT NULL, `ClientName` varchar(100) DEFAULT NULL, `ClientAge` int(11) DEFAULT NULL, `ClientCountryName` varchar(20) DEFAULT NULL, PRIMARY KEY (`Id`), UNIQUE KEY `Client_Id` (`Client_Id`,`ClientProjectDeadline`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
Kiểm tra ràng buộc
mysql> INSERT INTO keyReferringToDateDemo(Client_Id, ClientProjectDeadline, ClientName) VALUES (1, '2024-01-15', 'Project A'); Query OK, 1 row affected mysql> INSERT INTO keyReferringToDateDemo(Client_Id, ClientProjectDeadline, ClientName) VALUES (1, '2024-01-15', 'Project B'); ERROR 1062 (23000): Duplicate entry '1-2024-01-15' for key 'Client_Id'
Lưu ý
- UNIQUE KEY cho phép NULL (nhiều hàng NULL được phép)
- Nếu cần NOT NULL, thêm
Client_Id INT NOT NULL - Tên index tự động lấy tên cột đầu tiên (
Client_Id), có thể đặt tên tùy chỉnh:UNIQUE KEY uk_client_deadline (Client_Id, ClientProjectDeadline) - Composite unique key áp dụng cho bất kỳ kiểu dữ liệu nào: DATE, DATETIME, VARCHAR, INT...
So sánh với PRIMARY KEY
- PRIMARY KEY: NOT NULL, duy nhất 1/bảng, clustered index (InnoDB)
- UNIQUE KEY: Cho phép NULL, nhiều/bảng, secondary index