การเพิ่ม Unique Constraint ให้คอลัมน์ของตารางที่มีอยู่แล้ว ใช้คำสั่ง ALTER TABLE ... ADD CONSTRAINT ... UNIQUE
รูปแบบคำสั่ง
ALTER TABLE yourTableName
ADD CONSTRAINT yourConstraintName UNIQUE (yourColumnName1, yourColumnName2, ...);
ตัวอย่างขั้นตอน
1. สร้างตารางโดยไม่มี Unique Constraint
mysql> CREATE TABLE MovieCollectionDemo (
-> MovieId INT,
-> MovieDirectorName VARCHAR(200),
-> NumberOfSongs INT UNSIGNED
-> );
Query OK, 0 rows affected (0.62 sec)
2. ตรวจสอบโครงสร้าง (ก่อนเพิ่ม Unique)
mysql> DESC MovieCollectionDemo;
+-------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+-------+
| MovieId | int(11) | YES | | NULL | |
| MovieDirectorName | varchar(200) | YES | | NULL | |
| NumberOfSongs | int(10) unsigned | YES | | NULL | |
+-------------------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
3. เพิ่ม Unique Key บน MovieId
mysql> ALTER TABLE MovieCollectionDemo
-> ADD CONSTRAINT uni_moviecollection UNIQUE (MovieId);
Query OK, 0 rows affected (0.46 sec)
4. ตรวจสอบอีกครั้ง (หลังเพิ่ม Unique)
mysql> DESC MovieCollectionDemo;
+-------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+-------+
| MovieId | int(11) | YES | UNI | NULL | |
| MovieDirectorName | varchar(200) | YES | | NULL | |
| NumberOfSongs | int(10) unsigned | YES | | NULL | |
+-------------------+------------------+------+-----+---------+-------+
3 rows in set (0.02 sec)
คอลัมน์ Key แสดง UNI แสดงว่า Unique Key ทำงานแล้ว
ข้อจำกัดสำคัญ
- ข้อมูลต้องไม่ซ้ำกัน - หากมีค่าซ้ำในคอลัมน์ จะ Error:
Duplicate entry - อนุญาต NULL ได้หลายค่า - Unique Key ใน MySQL อนุญาตหลาย NULL (ต่างจาก Primary Key)
- หากต้องการ Unique และ Not Null ให้ใช้
PRIMARY KEYหรือเพิ่มNOT NULLแยกต่างหาก
ตรวจสอบข้อมูลซ้ำก่อนเพิ่ม Unique
SELECT MovieId, COUNT(*)
FROM MovieCollectionDemo
GROUP BY MovieId
HAVING COUNT(*) > 1;
เพิ่ม Unique หลายคอลัมน์ (Composite Unique)
ALTER TABLE MovieCollectionDemo
ADD CONSTRAINT uni_movie_director UNIQUE (MovieId, MovieDirectorName);
จะป้องกันการซ้ำของ ชุดค่ารวม ไม่ใช่แต่ละคอลัมน์แยกกัน