การใช้ UNIQUE CONSTRAINT
วิธีที่ดีที่สุดคือเพิ่ม UNIQUE KEY หรือ UNIQUE CONSTRAINT ให้กับคอลัมน์ที่ต้องการป้องกันค่าซ้ำ
รูปแบบคำสั่ง
ตอนสร้างตาราง (CREATE TABLE)
CREATE TABLE RemoveDuplicateEntry (
Id INT,
Name VARCHAR(100),
UNIQUE KEY uk_id (Id)
) ENGINE = InnoDB;
เพิ่มทีหลัง (ALTER TABLE)
ALTER TABLE RemoveDuplicateEntry
ADD CONSTRAINT uk_id UNIQUE (Id);
ตัวอย่างการใช้งานจริง
1. สร้างตาราง
CREATE TABLE RemoveDuplicateEntry (
Id INT,
Name VARCHAR(100)
) ENGINE = MyISAM;
2. เพิ่ม Unique Constraint
ALTER TABLE RemoveDuplicateEntry
ADD CONSTRAINT uk_id UNIQUE (Id);
3. ตรวจสอบโครงสร้าง
DESC RemoveDuplicateEntry;
| Field | Type | Null | Key | Default |
| Id | int(11) | YES | UNI | NULL |
| Name | varchar(100) | YES | | NULL |
4. ทดสอบ Insert ข้อมูลซ้ำ
INSERT INTO RemoveDuplicateEntry VALUES (101, 'John'); -- OK
INSERT INTO RemoveDuplicateEntry VALUES (101, 'John'); -- ERROR
ผลลัพธ์ Error
ERROR 1062 (23000): Duplicate entry '101' for key 'uk_id'
ตัวเลือกการจัดการ Duplicate
| วิธี | คำสั่ง | พฤติกรรม |
| Reject (Default) | INSERT ... | Error 1062, Rollback |
| Ignore | INSERT IGNORE ... | Skip row ที่ซ้ำ, Warning |
| Update | INSERT ... ON DUPLICATE KEY UPDATE col=VALUES(col) | Update row ที่มีอยู่ |
| Replace | REPLACE INTO ... | Delete + Insert ใหม่ (Auto Increment เปลี่ยน) |
ตัวอย่าง INSERT IGNORE
INSERT IGNORE INTO RemoveDuplicateEntry VALUES (101, 'John'), (102, 'Jane');
-- 1 row affected, 1 warning (Duplicate skipped)
ตัวอย่าง ON DUPLICATE KEY UPDATE
INSERT INTO RemoveDuplicateEntry (Id, Name) VALUES (101, 'John Updated')
ON DUPLICATE KEY UPDATE Name = VALUES(Name);
-- 2 rows affected (1 insert + 1 update = 2 ใน MySQL)
คำแนะนำ
- ✅ ใช้ InnoDB (Default) รองรับ Foreign Key, Transaction, Row Lock
- 🔍 ตั้งชื่อ Constraint เอง (uk_id) เพื่อจัดการง่าย (Drop, Rename)
- 📝 Composite Unique:
UNIQUE KEY uk_name (col1, col2)
- ⚡ Unique Index = Unique Constraint (MySQL ไม่แยกกัน)