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

เกิดอะไรขึ้นเมื่อตั้ง UNIQUE แล้ว INSERT ข้อมูลซ้ำหลายแถวพร้อมกัน

ถ้าตั้งเงื่อนไข UNIQUE แล้วพยายาม INSERT หลายแถวพร้อมกันซึ่งมีค่าซ้ำในคอลัมน์ UNIQUE จะเกิด Error และ ไม่มีแถวใดถูกเพิ่มเลย (All-or-nothing)

ตัวอย่างการใช้งาน

สร้างตารางมี UNIQUE constraint:

mysql> create table DemoTable1585 (
    -> StudentId int,
    -> StudentMarks int,
    -> UNIQUE(StudentId)
    -> );
Query OK, 0 rows affected (1.02 sec)

พยายาม INSERT 4 แถว พร้อมกันมี StudentId=3 ซ้ำ:

mysql> insert into DemoTable1585 values(1,87),(2,98),(3,91),(3,48);
ERROR 1062 (23000): Duplicate entry '3' for key 'StudentId'

ตรวจสอบข้อมูลในตาราง:

mysql> select * from DemoTable1585;
Empty set (0.00 sec)

คำอธิบาย

MySQL ใช้ All-or-nothing สำหรับ multi-row INSERT: หากมีแถวใดผิดเงื่อนไข UNIQUE ทั้งชุดจะถูกยกเลิก (Rollback) ไม่มีแถวเดียวถูกบันทึก ควรตรวจสอบข้อมูลก่อน INSERT หรือใช้ INSERT IGNORE / ON DUPLICATE KEY UPDATE ตามความต้องการ