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

เพิ่ม Unique Key ให้ตารางที่มีอยู่แล้วใน MySQL

การเพิ่ม 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);

จะป้องกันการซ้ำของ ชุดค่ารวม ไม่ใช่แต่ละคอลัมน์แยกกัน