เพื่อกำหนดให้คู่ของคอลัมน์ (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" ซ้ำได้ แต่ห้ามซ้ำเมื่อ "ชื่อ + เบอร์โทร" เหมือนกัน เหมาะสำหรับกรณีเช่น ป้องกันการลงทะเบียนซ้ำด้วยอีเมล+เบอร์โทร หรือ รหัสนักเรียน+รหัสวิชา