Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tạo khóa duy nhất (UNIQUE KEY) tham chiếu đến cột DATE trong MySQL?

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