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

วิธีรีเซ็ต MySQL AutoIncrement โดยใช้ค่า MAX จากตารางอื่น


คุณสามารถใช้คำสั่ง 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;

ผลลัพธ์

<ก่อนหน้า>+-----------+| ProductId |+-----------+| 2500 || 2501 |+-----------+2 แถวในชุด (0.00 วินาที)