ทำซ้ำและข้ามบนส่วนแทรกของ MySQL

คีย์หลักของตาราง MySQL และดัชนีที่ไม่ซ้ำกันป้องกันหลายแถวด้วยดัชนีเดียวกันไม่ให้ถูกเพิ่มเข้าไปในตาราง หากคุณพยายามแทรกแถวที่ซ้ำกันด้วยคำสั่ง INSERT มาตรฐานคุณจะพบข้อผิดพลาดและการแทรกจะล้มเหลว

MySQL มีทางเลือกมากมายสำหรับคำสั่ง INSERT มาตรฐานและแต่ละตัวจัดการแถวที่ซ้ำกันแตกต่างกันเล็กน้อย: "INSERT IGNORE, " "INSERT ... ON DUPLICATE KEY UPDATE" และ "REPLACE"

คีย์หลักและดัชนีที่ไม่ซ้ำกัน

ดัชนีคีย์หลักและข้อ จำกัด ดัชนี "UNIQUE" ต้องการให้ทุกแถวมีค่าที่ไม่ซ้ำกันในคอลัมน์ดัชนีทำให้แต่ละแถวสามารถระบุได้ด้วยคีย์หลักหรือค่าในคอลัมน์ข้อ จำกัด ดัชนี UNIQUE

หาก INSERT ปกติพยายามแทรกแถวที่มีค่าซ้ำกันในคีย์หลักหรือดัชนีข้อ จำกัด UNIQUE การแทรกจะล้มเหลวอาจเป็นไปได้ที่จะย้อนกลับธุรกรรมทั้งหมด

ใส่ IGNORE

INSERT IGNORE จะแทรกแถวในลักษณะเดียวกับ INSERT แต่มีข้อยกเว้นว่าจะละเว้นแถวที่มีค่าซ้ำกันและดำเนินการต่อโดยไม่สร้างข้อผิดพลาด แถวใด ๆ ที่มีค่าซ้ำจะไม่ถูกแทรกเข้าไป ตัวอย่างเช่น:

ใส่ IGNORE เข้าไปใน my_table (unique_index_column, other_column) ค่า (1, 'ค่าอื่น');

INSERT ... อัปเดตคีย์ซ้ำกัน

INSERT ... ON DUPLICATE KEY UPDATE จะแทรกแถวที่ไม่ซ้ำกันตามปกติ อย่างไรก็ตามเมื่อพบแถวที่ซ้ำกันแถวนั้นจะทำการ UPDATE ในแถวเดิม ตัวอย่างเช่น:

INSERT INTO my_table (unique_index_column, other_column) ค่า (1, 'ค่าอื่น ๆ ') ในการทำซ้ำคีย์ UPDATE other_column = 'ค่าอัพเดตซ้ำ';

แทนที่

REPLACE ทำงานเหมือนกับ INSERT ยกเว้นว่าเมื่อพบแถวที่ซ้ำกันจะเป็นการลบแถวเดิมแล้วทำการแทรกต่อ แถวใด ๆ ที่มีค่าดัชนีซ้ำไม่ซ้ำกันจะแทนที่แถวที่มีค่าอยู่เดิม ตัวอย่างเช่น:

แทนที่เป็น my_table (unique_index_column, other_column) ค่า (1, 'ค่าอื่น')

โพสต์ยอดนิยม