การป้องกัน Duplicate Entry ใน MySQL ด้วย UNIQUE Constraint
เพิ่ม UNIQUE CONSTRAINT บนคอลัมน์ (หรือชุดคอลัมน์) ที่ห้ามซ้ำ MySQL จะบล็อกการ INSERT/UPDATE ที่ทำให้ซ้ำ
ตัวอย่างการใช้งาน
สร้างตาราง:
mysql> create table DemoTable (Id int, Name varchar(100));
เพิ่ม UNIQUE Constraint บน (Id, Name):
mysql> alter table DemoTable add constraint id_NameUnKey UNIQUE(Id, Name); Query OK, 0 rows affected (0.82 sec)
ทดสอบ Insert:
mysql> insert into DemoTable values(11, 'John'); -- OK Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(12, 'John'); -- OK (Id ต่างกัน) Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable values(11, 'John'); -- ERROR: Duplicate ERROR 1062 (23000): Duplicate entry '11-John' for key 'id_NameUnKey'
ข้อมูลในตาราง (2 แถว):
+------+------+ | Id | Name | +------+------+ | 11 | John | | 12 | John | +------+------+
ประเภท Unique Constraint:
UNIQUE (col)- คอลัมน์เดียวไม่ซ้ำUNIQUE (col1, col2)- Composite Unique (คู่ col1+col2 ไม่ซ้ำ)PRIMARY KEY- Unique + Not Null + Clustered Index (InnoDB)
จัดการ Duplicate แบบ Silent (ไม่ Error):
INSERT IGNORE INTO ...- ข้ามแถวซ้ำ ไม่ ErrorINSERT ... ON DUPLICATE KEY UPDATE col = VALUES(col)- อัปเดตแทน InsertREPLACE INTO ...- ลบเก่า ใส่ใหม่ (ต้องมี PK/Unique)