Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ทำให้คู่คอลัมน์เป็น Unique ใน MySQL ด้วย ALTER TABLE

เพื่อกำหนดให้คู่ของคอลัมน์ (Composite Unique Key) มีค่าไม่ซ้ำกันใน MySQL ใช้ ALTER TABLE ... ADD UNIQUE

รูปแบบคำสั่ง (Syntax)

ALTER TABLE yourTableName 
ADD UNIQUE yourUniqueName(yourColumnName1, yourColumnName2, ...);

ตัวอย่างการสร้างตาราง

mysql> create table DemoTable ( 
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    StudentFirstName varchar(100), 
    StudentLastName varchar(100), 
    StudentAge int, 
    StudentPhoneNumber varchar(20) ); 
Query OK, 0 rows affected (0.81 sec)

เพิ่ม Unique Constraint สำหรับคู่ FirstName + PhoneNumber

mysql> alter table DemoTable 
add unique DemoTable_unique_StudentFirstName_StudentPhoneNumber(StudentFirstName,StudentPhoneNumber); 
Query OK, 0 rows affected (0.40 sec)
Records: 0  Duplicates: 0  Warnings: 0

ทดสอบเพิ่มข้อมูล (คู่ที่ 3 จะผิดพลาดเพราะซ้ำ)

mysql> insert into DemoTable(StudentFirstName,StudentLastName,StudentAge,StudentPhoneNumber) 
values('John','Doe',21,'9878567878'); 
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable(StudentFirstName,StudentLastName,StudentAge,StudentPhoneNumber) 
values('John','Smith',23,'7654674545'); 
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable(StudentFirstName,StudentLastName,StudentAge,StudentPhoneNumber) 
values('John','Brown',21,'9878567878'); 
ERROR 1062 (23000): Duplicate entry 'John-9878567878' for key 'DemoTable_unique_StudentFirstName_StudentPhoneNumber'

แสดงข้อมูลที่เพิ่มสำเร็จ

mysql> select * from DemoTable;
+-----------+------------------+-----------------+------------+--------------------+
| StudentId | StudentFirstName | StudentLastName | StudentAge | StudentPhoneNumber |
+-----------+------------------+-----------------+------------+--------------------+
| 1         | John             | Doe             | 21         | 9878567878         |
| 2         | John             | Smith           | 23         | 7654674545         |
+-----------+------------------+-----------------+------------+--------------------+
2 rows in set (0.00 sec)

คำอธิบาย: Unique Constraint นี้อนุญาตให้ชื่อ "John" ซ้ำได้ แต่ห้ามซ้ำเมื่อ "ชื่อ + เบอร์โทร" เหมือนกัน เหมาะสำหรับกรณีเช่น ป้องกันการลงทะเบียนซ้ำด้วยอีเมล+เบอร์โทร หรือ รหัสนักเรียน+รหัสวิชา