หากคุณกำลังใช้กลไก InnoDB คุณจะไม่สามารถตั้งค่า auto_increment ของตารางเป็นค่าที่ต่ำกว่าได้ คุณต้องเปลี่ยนเอ็นจิ้นของคุณจาก InnoDB เป็น MyISAM
หมายเหตุ: เครื่องยนต์ MyISAM ช่วยให้คุณสามารถตั้งค่าที่ต่ำกว่า เราก็ใช้อยู่เหมือนกัน
ตามเอกสารอย่างเป็นทางการ:
คุณไม่สามารถรีเซ็ตตัวนับเป็นค่าที่น้อยกว่าหรือเท่ากับค่าใดๆ ที่ถูกใช้ไปแล้ว สำหรับ MyISAM หากค่าน้อยกว่าหรือเท่ากับค่าสูงสุดในปัจจุบันในคอลัมน์ AUTO_INCREMENT ค่าจะถูกรีเซ็ตเป็นค่าสูงสุดปัจจุบันบวกหนึ่ง สำหรับ InnoDB หากค่าน้อยกว่าค่าสูงสุดปัจจุบันในคอลัมน์ จะไม่มีข้อผิดพลาดเกิดขึ้นและค่าลำดับปัจจุบันจะไม่เปลี่ยนแปลง
ดังที่แสดงไว้ด้านบน ใน MyISAM สมมุติว่า ID บางตัวถูกลบ หลังจากนั้น หากคุณจะเพิ่ม auto_increment อีกครั้ง ID จะเริ่มจากค่าที่ต่ำกว่า เช่น เริ่มจาก idsremaining สุดท้าย (หลังจากที่เราลบ ID บางตัว)
ให้เราสร้างตารางด้วยเครื่องมือ MyISAM ก่อน:
mysql> สร้างตาราง DemoTable (Id int ไม่ใช่ NULL AUTO_INCREMENT PRIMARY KEY)ENGINE='MyISAM'; เคียวรีตกลง 0 แถวได้รับผลกระทบ (0.23 วินาที)
ต่อไปนี้เป็นแบบสอบถามเพื่อแทรกระเบียนในตารางโดยใช้คำสั่งแทรก:
mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.04 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.03 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.03 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.02 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.05 วินาที) mysql> แทรกลงในค่า DemoTable ();แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.08 วินาที)
ต่อไปนี้เป็นแบบสอบถามเพื่อแสดงระเบียนจากตารางโดยใช้คำสั่ง select:
mysql> เลือก *จาก DemoTable;
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้
<ก่อนหน้า>+----+| รหัส |+---+| 1 || 2 || 3 || 4 || 5 || 6 |+----+6 แถวในชุด (0.00 วินาที)ตอนนี้ ลบรหัส 4,5 และ 6:
mysql> ลบออกจาก DemoTable โดยที่ Id=4 หรือ Id=5 หรือ Id=6;Query OK ได้รับผลกระทบ 3 แถว (0.06 วินาที)
ให้เราแสดงบันทึกทั้งหมดอีกครั้ง ต่อไปนี้เป็นแบบสอบถาม:
mysql> เลือก *จาก DemoTable;
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้หลังจากลบ ID บางตัว:
<ก่อนหน้า>+----+| รหัส |+---+| 1 || 2 || 3 |+----+3 แถวในชุด (0.00 วินาที)ตอนนี้ ให้เราตั้งค่า auto_increment id ใหม่
ต่อไปนี้เป็นแบบสอบถามเพื่อตั้งค่า auto_increment ให้ต่ำกว่าในกลไกจัดการ MyISAM อย่างไรก็ตาม ค่า auto_increment ปัจจุบันควรเริ่มต้นจาก 7 แต่เนื่องจากเรากำลังใช้เครื่องมือ MyISAM ดังนั้น ค่าจะถูกรีเซ็ตเป็นค่าสูงสุดปัจจุบัน ซึ่งเท่ากับ 3 บวกหนึ่ง นั่นคือ 3+ 1 =4 จะเป็นรหัสใหม่
ต่อไปนี้เป็นแบบสอบถาม:
mysql> แก้ไขตาราง DemoTable auto_increment=4;Query OK, 3 แถวได้รับผลกระทบ (0.38 วินาที)ระเบียน:3 รายการซ้ำ:0 คำเตือน:0
ตอนนี้แทรกบางระเบียนอีกครั้งแล้วแสดงระเบียนทั้งหมดจากตารางเพื่อตรวจสอบค่า auto_increment เริ่มต้นจาก 4:
mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.03 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.06 วินาที) mysql> แทรกลงในค่า DemoTable (); ข้อความค้นหาตกลง ได้รับผลกระทบ 1 แถว (0.02 วินาที)
ต่อไปนี้เป็นแบบสอบถามเพื่อแสดงระเบียนทั้งหมดจากตาราง:
mysql> เลือก *จาก DemoTable;
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ รหัสใหม่เริ่มต้นจาก 4:
<ก่อนหน้า>+----+| รหัส |+---+| 1 || 2 || 3 || 4 || 5 || 6 |+----+6 แถวในชุด (0.00 วินาที)