MySQL แทรกละเว้นคีย์ที่ซ้ำกัน

Mysql Insert Ignore Duplicate Key



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

ไวยากรณ์:

นี่คือไวยากรณ์สำหรับแบบสอบถาม INSERT IGNORE







>>INSERT IGNORE INTO table_name(col1, col2, col3)ค่านิยม(value_list),(value_list),(value_list);

INSERT IGNORE ผ่าน Workbench:

เปิด MySQL Workbench 8.0 จากระบบของคุณและเชื่อมต่อกับอินสแตนซ์ฐานข้อมูล





ในพื้นที่คำสั่ง คุณต้องสร้างตาราง Employee ที่มีสี่คอลัมน์ ซึ่งหนึ่งในนั้นต้องระบุเป็น UNIQUE ลองใช้แบบสอบถามด้านล่างในพื้นที่แบบสอบถามเนวิเกเตอร์เพื่อสร้างตารางนี้ เลือกแบบสอบถามทั้งหมดแล้วคลิกเครื่องหมายแฟลชเพื่อดำเนินการ





>>สร้างพนักงานโต๊ะ(ID int คีย์หลักไม่ใช่ NULL ชื่อvarchar(ห้าสิบ)ไม่โมฆะ อายุ Varchar(ห้าสิบ), เงินเดือน varchar(ห้าสิบ), มีเอกลักษณ์(NS));

เมื่อสร้าง คุณจะค้นหาพนักงานตารางได้ในรายการภายใต้ตัวเลือกของ Tables ใต้ข้อมูลฐานข้อมูล



ในมุมมองกริด คุณสามารถป้อนเรกคอร์ดโดยไม่ต้องพิมพ์คิวรีใดๆ ดังนั้นให้เปิดมุมมองกริดของพนักงานตารางและเพิ่มระเบียนบางส่วนตามที่แสดงด้านล่าง เราได้ป้อนระเบียนที่ไม่ซ้ำทั้งหมดโดยไม่มีรายการซ้ำ กดปุ่ม 'ใช้' เพื่อใช้การเปลี่ยนแปลง

หน้าต่างใหม่จะเปิดขึ้นพร้อมกับข้อความค้นหาที่เกี่ยวข้องซึ่งเกี่ยวข้องกับบันทึกที่เราได้ป้อนไว้ข้างต้น หน้าจอนี้เรียกว่าหน้าจอรีวิวได้ หากคุณต้องการเปลี่ยนแปลงบางสิ่ง คุณสามารถทำได้ที่นี่ มิฉะนั้น ให้กดปุ่ม Apply เพื่อดำเนินการค้นหา

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

นี่คือทั้งหมดที่เกี่ยวกับมุมมองกริด ตอนนี้ เราจะทำการแทรกเรกคอร์ดผ่านพื้นที่การสืบค้น ในขณะเดียวกัน เราได้แทรกบันทึกที่ซ้ำกันในครั้งนี้เพื่อตรวจสอบผลลัพธ์ ดังนั้นเราจึงได้ลองใช้คำสั่ง INSERT ด้านล่าง ซึ่งเรามีรายการค่าสองรายการ รายการค่าทั้งสองมีค่าเท่ากันที่คอลัมน์ 'ID' เลือกแบบสอบถามและกดเครื่องหมายแฟลชเพื่อดำเนินการแบบสอบถาม

แบบสอบถามจะทำงานไม่ถูกต้อง และจะสร้างข้อผิดพลาดเนื่องจากค่าที่ซ้ำกันในคำสั่ง INSERT ตามที่แสดงในรูปภาพ

ตอนนี้ให้ลองใช้แบบสอบถามข้างต้นด้วยคำสั่ง INSERT IGNORE และดำเนินการตามที่แสดง

คุณจะเห็นว่าไม่ได้สร้างข้อผิดพลาดในพื้นที่ส่งออก แต่ให้คำเตือนว่าคำสั่งมีค่าที่ซ้ำกัน

รีเฟรชมุมมองตารางของพนักงานตาราง แบบสอบถาม INSERT IGNORE ทำงานได้ครึ่งหนึ่ง มันแทรกรายการค่าแรกลงในตาราง แต่รายการค่าที่สองถูกละเว้นเนื่องจากค่าที่ซ้ำกัน 13

INSERT IGNORE ผ่าน Command-Line Shell:

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

ตอนนี้ได้เวลาสร้างตารางแล้ว ลองใช้คำสั่งด้านล่างเพื่อทำเช่นนั้น เราได้สร้างตารางชื่อ 'รัฐมนตรี' ในขณะที่คอลัมน์ใดคอลัมน์หนึ่งมีข้อจำกัดที่ไม่ซ้ำใคร เป็นที่ชัดเจนว่า ID คอลัมน์จะยอมรับเฉพาะค่าที่ไม่ซ้ำและไม่ยอมรับค่าที่ซ้ำกัน

>>สร้างตาราง data.minister(คีย์หลัก INT กลาง ไม่ซ้ำกัน ไม่ใช่ NULL ชื่อ VARCHAR(สี่ห้า), เมือง VARCHAR(สี่ห้า));

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

เนื่องจาก ID คอลัมน์ไม่ซ้ำกัน เมื่อเราลองใช้คำสั่งด้านล่างบนเชลล์บรรทัดคำสั่ง มันจะสร้างข้อผิดพลาด เนื่องจากเราได้เพิ่มค่า 11 ในการสืบค้นก่อนหน้า และเนื่องจากคีย์ UNIQUE ทำให้เราเพิ่มค่าที่ซ้ำกันไม่ได้อีก

ดังนั้นเมื่อตรวจสอบตาราง เราจะเห็นว่าตารางมีเพียง 1 ระเบียนที่เพิ่มโดยแบบสอบถาม INSERT แรก

>>เลือก*จาก data.minister;

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

ดังที่คุณเห็นจากผลลัพธ์ด้านล่าง เรามีเพียงสองระเบียนในตารางนี้ —รายการค่าแรกที่มีให้ในแบบสอบถามด้านบนซึ่งถูกมองข้ามไป

>>เลือก*จาก data.minister;

บทสรุป:

เราได้ทำตัวอย่างที่จำเป็นทั้งหมดของ INSERT IGNORE เกี่ยวกับค่าที่ซ้ำกันผ่านเชลล์ไคลเอนต์บรรทัดคำสั่ง MySQL Workbench และ MySQL