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

MySQL ใดส่งคืนเมื่อเราเปลี่ยนค่า AUTO_INCREMENT ซึ่งน้อยกว่าหมายเลขลำดับปัจจุบัน


เมื่อเราใช้ 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)