การใช้ UNIQUE Constraint ป้องกันข้อมูลซ้ำ
กำหนด UNIQUE(col1, col2) ตอนสร้างตาราง จะบังคับให้ชุดค่า (col1, col2) ไม่ซ้ำกัน
ตัวอย่าง
mysql> create table DemoTable832(
FirstName varchar(100),
LastName varchar(100),
UNIQUE(FirstName, LastName) );
Query OK, 0 rows affected (0.87 sec)
ทดสอบ INSERT
mysql> insert into DemoTable832 values('John', 'Smith'); -- OK
mysql> insert into DemoTable832 values('Adam', 'Smith'); -- OK (LastName ซ้ำได้ FirstName ต่าง)
mysql> insert into DemoTable832 values('John', 'Doe'); -- OK (FirstName ซ้ำได้ LastName ต่าง)
mysql> insert into DemoTable832 values('John', 'Smith'); -- ERROR 1062: Duplicate entry
ข้อผิดพลาด:
ERROR 1062 (23000): Duplicate entry 'John-Smith' for key 'FirstName'
ผลลัพธ์ข้อมูลที่อยู่ในตาราง
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam | Smith |
| John | Doe |
| John | Smith |
+-----------+----------+
ตัวเลือกเพิ่มเติม
-- UNIQUE คอลัมน์เดียว
CREATE TABLE t (email VARCHAR(100) UNIQUE);
-- UNIQUE หลายคอลัมน์ แยก Constraint
CREATE TABLE t (a INT, b INT, UNIQUE KEY uk_ab (a, b));
-- INSERT IGNORE (ข้ามแถวซ้ำ ไม่ Error)
INSERT IGNORE INTO DemoTable832 VALUES ('John', 'Smith');
-- INSERT ... ON DUPLICATE KEY UPDATE (อัปเดตถ้าซ้ำ)
INSERT INTO DemoTable832 VALUES ('John', 'Smith')
ON DUPLICATE KEY UPDATE LastName = 'Updated';
สรุป
ใช้ UNIQUE(col1, col2) ป้องกันข้อมูลซ้ำแบบ Composite Key ใช้ INSERT IGNORE หรือ ON DUPLICATE KEY UPDATE จัดการกรณีซ้ำได้ตามต้องการ