สามารถเพิ่ม Unique Constraint (หรือ Unique Index) ให้กับคอลัมน์ที่มีอยู่แล้วได้โดยใช้คำสั่ง ALTER TABLE ... ADD UNIQUE ซึ่งจะป้องกันไม่ให้ข้อมูลซ้ำกันในคอลัมน์หรือชุดคอลัมน์ที่กำหนด
Syntax
ALTER TABLE table_name ADD UNIQUE index_name (column1, column2, ...);
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> create table DemoTable1811 ( FirstName varchar(20), LastName varchar(20) ); Query OK, 0 rows affected (0.00 sec)
2. เพิ่ม Unique Index บน 2 คอลัมน์ (Composite Unique)
mysql> alter table DemoTable1811 ADD UNIQUE unique_index_first_last_name(FirstName, LastName); Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
3. ทดสอบเพิ่มข้อมูล
mysql> insert into DemoTable1811 values('John','Smith'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1811 values('John','Doe'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1811 values('Adam','Smith'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1811 values('John','Doe');
ERROR 1062 (23000): Duplicate entry 'John-Doe' for key 'unique_index_first_last_name'
ข้อผิดพลาดเกิดขึ้นเพราะคู่ (John, Doe) มีอยู่แล้ว
4. ตรวจสอบข้อมูลที่บันทึกได้
mysql> select * from DemoTable1811;
+-----------+----------+ | FirstName | LastName | +-----------+----------+ | Adam | Smith | | John | Doe | | John | Smith | +-----------+----------+ 3 rows in set (0.00 sec)
ประเภท Unique Constraint
| ประเภท | Syntax | คำอธิบาย |
|---|---|---|
| Single Column | ADD UNIQUE idx_name (col) | คอลัมน์เดียวต้องไม่ซ้ำ |
| Composite | ADD UNIQUE idx_name (col1, col2) | ชุดคอลัมน์รวมกันไม่ซ้ำ |
| Primary Key | ADD PRIMARY KEY (col) | Unique + Not Null + Clustered Index |
คำสั่งที่เกี่ยวข้อง
-- ลบ Unique Index ALTER TABLE table_name DROP INDEX index_name; -- ดู Index ที่มีอยู่ SHOW INDEX FROM table_name;
สรุป: ใช้ ALTER TABLE ... ADD UNIQUE เพื่อเพิ่มเงื่อนไขไม่ซ้ำได้ทีหลัง รองรับทั้งคอลัมน์เดียวและ Composite (หลายคอลัมน์) จะสร้าง Index อัตโนมัติเพื่อประสิทธิภาพการตรวจสอบ