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

MySQL: แทรกเฉพาะค่าที่ไม่ซ้ำด้วย UNIQUE Constraint

การใช้ 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 จัดการกรณีซ้ำได้ตามต้องการ