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

Tạo cặp cột unique (unique constraint trên 2 cột) trong MySQL


Giới thiệu

Để đảm bảo sự kết hợp của 2 (hoặc nhiều) cột là duy nhất (ví dụ: FirstName + PhoneNumber không được trùng), dùng ALTER TABLE ... ADD UNIQUE.

Cú pháp

ALTER TABLE your_table 
ADD UNIQUE constraint_name (col1, col2, ...);

Ví dụ minh họa

Tạo bảng

mysql> CREATE TABLE DemoTable (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName VARCHAR(100),
    StudentLastName VARCHAR(100),
    StudentAge INT,
    StudentPhoneNumber VARCHAR(20)
);

Thêm unique constraint cho cặp (FirstName, PhoneNumber)

mysql> ALTER TABLE DemoTable 
ADD UNIQUE DemoTable_unique_StudentFirstName_StudentPhoneNumber 
(StudentFirstName, StudentPhoneNumber);

Test insert

mysql> INSERT INTO DemoTable (StudentFirstName, StudentLastName, StudentAge, StudentPhoneNumber) 
VALUES ('John', 'Doe', 21, '9878567878');  -- OK

mysql> INSERT INTO DemoTable (StudentFirstName, StudentLastName, StudentAge, StudentPhoneNumber) 
VALUES ('John', 'Smith', 23, '7654674545'); -- OK (FirstName trùng nhưng Phone khác)

mysql> INSERT INTO DemoTable (StudentFirstName, StudentLastName, StudentAge, StudentPhoneNumber) 
VALUES ('John', 'Brown', 21, '9878567878'); -- ERROR 1062: Duplicate entry 'John-9878567878'

Kết quả bảng

+-----------+------------------+-----------------+------------+--------------------+
| StudentId | StudentFirstName | StudentLastName | StudentAge | StudentPhoneNumber |
+-----------+------------------+-----------------+------------+--------------------+
| 1         | John             | Doe             | 21         | 9878567878         |
| 2         | John             | Smith           | 23         | 7654674545         |
+-----------+------------------+-----------------+------------+--------------------+

Lưu ý

  • Unique constraint tạo ngầm một unique index.
  • Cho phép nhiều giá trị NULL (theo SQL standard), trừ khi cột NOT NULL.
  • Tên constraint nên đặt có ý nghĩa: uk_table_col1_col2 hoặc unique_table_col1_col2.
  • Để xóa: ALTER TABLE DemoTable DROP INDEX constraint_name;