คุณสามารถใช้คำสั่ง prepare เพื่อรีเซ็ต MySQL AutoIncrement โดยใช้ค่า MAX จากตารางอื่น
ต่อไปนี้เป็นวากยสัมพันธ์ −
set @anyVariableName1=(เลือก MAX(yourColumnName) จาก yourTableName1);SET @anyVariableName2 =CONCAT('ALTER TABLE yourTableName2AUTO_INCREMENT=', @anyVariableName1);PREPARE yourStatementName FROM @anyVariableName2;execute yourStatementName;set
ไวยากรณ์ข้างต้นจะรีเซ็ต MySQL auto_increment โดยใช้ค่าสูงสุดจากตารางอื่น เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างสองตาราง ตารางแรกจะมีระเบียนและตารางที่สองจะใช้ค่าสูงสุดจากตารางแรกและใช้สำหรับคุณสมบัติ auto_increment
แบบสอบถามเพื่อสร้างตารางมีดังนี้ −
mysql> สร้างตาราง FirstTableMaxValue -> ( -> MaxNumber int -> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.64 วินาที)
แทรกบันทึกจากตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้ −
mysql> แทรกลงในค่า FirstTableMaxValue (100) แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.15 วินาที) mysql> แทรกลงในค่า FirstTableMaxValue (1000) แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.19 วินาที) mysql> แทรกลงในค่า FirstTableMaxValue ( 2000); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.12 วินาที) mysql> แทรกลงในค่า FirstTableMaxValue (90); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.15 วินาที) mysql> แทรกลงในค่า FirstTableMaxValue (2500); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ ( 0.17 วินาที) mysql> แทรกลงในค่า FirstTableMaxValue (2300) แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.12 วินาที)
แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select
แบบสอบถามมีดังนี้ −
mysql> เลือก *จาก FirstTableMaxValue;
ผลลัพธ์
<ก่อนหน้า>+-----------+| MaxNumber |+-----------+| 100 || 1000 || 2000 || 90 || 2500 || 2300 |+-----------+6 แถวในชุด (0.05 วินาที)ตอนนี้คุณสามารถสร้างตารางที่สองได้ แบบสอบถามเพื่อสร้างตารางที่สองมีดังนี้ −
mysql> สร้างตาราง AutoIncrementWithMaxValueFromTable -> ( -> ProductId int ไม่ใช่ null auto_increment, -> คีย์หลัก (ProductId) -> ); แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (1.01 วินาที)
ที่นี่ฉันจะรวมคำสั่งที่จะได้รับค่าสูงสุดจากตารางแรกและตั้งค่าสูงสุดเป็นคุณสมบัติ auto_increment สำหรับตารางที่สอง แบบสอบถามมีดังนี้ −
mysql> set @v=(เลือก MAX(MaxNumber) จาก FirstTableMaxValue);Query OK, 0 แถวได้รับผลกระทบ (0.00 วินาที)mysql> SET @Value2 =CONCAT('ALTER TABLE AutoIncrementWithMaxValueFromTableAUTO_INCREMENT=', @v);Query OK , 0 แถวได้รับผลกระทบ (0.00 วินาที) mysql> เตรียม myStatement จาก @value2; แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.29 วินาที) คำชี้แจงที่เตรียมไว้mysql> ดำเนินการ myStatement; แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.38 วินาที) บันทึก:0 รายการซ้ำ:0 คำเตือน:0
ตอนนี้เราได้เพิ่มค่าสูงสุดซึ่งก็คือ 2500 จากตารางแรกไปยังตารางที่สอง ตอนนี้คุณสามารถแทรกบันทึกในตารางที่เริ่มต้นจาก 2500, 2501 เป็นต้น
แบบสอบถามเพื่อแทรกระเบียนในตารางที่สองมีดังนี้ -
mysql> แทรกลงในค่า AutoIncrementWithMaxValueFromTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.24 วินาที) mysql> แทรกลงในค่า AutoIncrementWithMaxValueFromTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.10 วินาที)
ตรวจสอบระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้ −
mysql> เลือก *จาก AutoIncrementWithMaxValueFromTable;