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

เพิ่ม Unique Constraint ใน MySQL ด้วย ALTER TABLE ADD UNIQUE

สามารถเพิ่ม 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 ColumnADD UNIQUE idx_name (col)คอลัมน์เดียวต้องไม่ซ้ำ
CompositeADD UNIQUE idx_name (col1, col2)ชุดคอลัมน์รวมกันไม่ซ้ำ
Primary KeyADD 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 อัตโนมัติเพื่อประสิทธิภาพการตรวจสอบ