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

วิธีป้องกันไม่ให้เพิ่มข้อมูลซ้ำในตาราง MySQL

การใช้ 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;
FieldTypeNullKeyDefault
Idint(11)YESUNINULL
Namevarchar(100)YESNULL

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
IgnoreINSERT IGNORE ...Skip row ที่ซ้ำ, Warning
UpdateINSERT ... ON DUPLICATE KEY UPDATE col=VALUES(col)Update row ที่มีอยู่
ReplaceREPLACE 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 ไม่แยกกัน)