เมื่อเราใช้ AUTO_INCREMENT ในคอลัมน์ MySQL หมายเลขลำดับจะเพิ่มขึ้นเสมอโดยเริ่มจากค่าดีฟอลต์ 1 หรือจากค่าที่เราระบุ
นั่นคือเหตุผลที่ MySQL ไม่อนุญาตให้เปลี่ยนค่า AUTO_INCREMENT เป็นค่าที่น้อยกว่าหมายเลขลำดับปัจจุบัน สามารถเข้าใจได้ด้วยความช่วยเหลือของตัวอย่างต่อไปนี้ −
ตัวอย่าง
ในตัวอย่างนี้ สมมติว่าเรามีตารางชื่อ 'emp1' และในขณะที่สร้างตาราง เราระบุ AUTO_INCREMENT VALUE เป็น 100 ดังนั้นหลังจากแทรกค่าลงในตารางแล้ว ลำดับจะเริ่มต้นจาก 100 เป็นต้นไปตามที่สามารถทำได้ เห็นได้จากผลลัพธ์ของแบบสอบถามต่อไปนี้ -
mysql> Select * from emp1; +-----+---------+ | id | NAME | +-----+---------+ | 100 | Sohan | | 101 | Harshit | +-----+---------+ 2 rows in set (0.00 sec)
ตอนนี้เมื่อเราพยายามเปลี่ยนค่า AUTO_INCREMENT เป็น 90 ด้วยความช่วยเหลือของ ALTER TABLE เคียวรี MySQL จะไม่ส่งคืนข้อผิดพลาดและคำเตือนเนื่องจากเคียวรีนั้นใช้ได้ แต่เมื่อเราแทรกค่าใหม่ลงในตาราง MySQL จะเปรียบเทียบค่าที่ระบุ ค่า AUTO_INCREMENT ด้วยหมายเลขลำดับปัจจุบัน เนื่องจากค่า AUTO_INCREMENT ที่ระบุ (90) น้อยกว่าหมายเลขลำดับปัจจุบัน (101) MySQL เริ่มสะสมค่าใหม่ตั้งแต่ 102 เป็นต้นไป ซึ่งสามารถสังเกตได้จากข้อความค้นหาต่อไปนี้ -
mysql> ALTER TABLE EMP1 AUTO_INCREMENT = 90; Query OK, 2 rows affected (0.31 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> Insert into emp1(name) values('Aryan'); Query OK, 1 row affected (0.08 sec) mysql> Select * from emp1; +-----+---------+ | id | NAME | +-----+---------+ | 100 | Sohan | | 101 | Harshit | | 102 | Aryan | +-----+---------+ 3 rows in set (0.00 sec)
ในทางตรงกันข้าม หากเราจะพยายามเปลี่ยน AUTO_INCREMENT เป็นค่าที่สูงกว่าหมายเลขลำดับปัจจุบัน MySQL จะเริ่มสะสมค่าใหม่จากค่าที่ระบุ
เพื่อให้ชัดเจนยิ่งขึ้นในตาราง 'emp1' เราจึงเปลี่ยนค่า AUTO_INCREMENT เป็น 108 ซึ่งสูงกว่าหมายเลขลำดับปัจจุบัน ดังนั้น MySQL จึงเริ่มสะสมค่าที่แทรกใหม่จากค่า AUTO_INCREMENT ที่ระบุ เช่น จาก 108 เป็นต้นไป
mysql> ALTER TABLE EMP1 AUTO_INCREMENT = 108; Query OK, 3 rows affected (0.30 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> Insert into emp1(name) values('Daksh'); Query OK, 1 row affected (0.04 sec) mysql> Insert into emp1(name) values('Yashraj'); Query OK, 1 row affected (0.06 sec) mysql> Select * from emp1; +-----+---------+ | id | NAME | +-----+---------+ | 100 | Sohan | | 101 | Harshit | | 102 | Aryan | | 108 | Daksh | | 109 | Yashraj | +-----+---------+ 5 rows in set (0.00 sec)