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

จะเพิ่มค่าอัตโนมัติของตารางเป็นค่าที่ต่ำกว่าใน MySQL ได้อย่างไร


หากคุณกำลังใช้กลไก 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 วินาที)