MySQL ไม่มีคำสั่งสร้าง Sequence (Sequence Object) แบบ Oracle หรือ PostgreSQL แต่ใช้ AUTO_INCREMENT บนคอลัมน์ Integer เพื่อสร้างลำดับตัวเลขอัตโนมัติ
การใช้งานพื้นฐาน
CREATE TABLE table_name (
id INT AUTO_INCREMENT PRIMARY KEY,
...
);
ตัวอย่าง: สร้างตารางพร้อม AUTO_INCREMENT
mysql> CREATE TABLE AutoIncrementDemo (
-> EmployeeId INT AUTO_INCREMENT,
-> PRIMARY KEY(EmployeeId)
-> );
Query OK, 0 rows affected (0.54 sec)
เพิ่มข้อมูลโดยไม่ระบุค่า EmployeeId
mysql> INSERT INTO AutoIncrementDemo VALUES ();
mysql> INSERT INTO AutoIncrementDemo VALUES ();
mysql> INSERT INTO AutoIncrementDemo VALUES ();
mysql> INSERT INTO AutoIncrementDemo VALUES ();
mysql> INSERT INTO AutoIncrementDemo VALUES ();
mysql> INSERT INTO AutoIncrementDemo VALUES ();
ตรวจสอบลำดับที่สร้างขึ้น
mysql> SELECT * FROM AutoIncrementDemo;
+------------+
| EmployeeId |
+------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+------------+
6 rows in set (0.00 sec)
เปลี่ยนค่าเริ่มต้นของ AUTO_INCREMENT
ค่าเริ่มต้นคือ 1 สามารถเปลี่ยนได้ด้วย ALTER TABLE:
ALTER TABLE table_name AUTO_INCREMENT = 1000;
ตัวอย่าง: เริ่มจาก 1000
mysql> ALTER TABLE AutoIncrementDemo AUTO_INCREMENT = 1000;
Query OK, 0 rows affected (0.20 sec)
mysql> INSERT INTO AutoIncrementDemo VALUES ();
mysql> INSERT INTO AutoIncrementDemo VALUES ();
+------------+
| EmployeeId |
+------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 1000 |
| 1001 |
+------------+
8 rows in set (0.00 sec)
หมายเหตุ: ค่าที่มีอยู่แล้วไม่ได้รับผลกระทบ ค่าใหม่จะเริ่มจากค่าที่ตั้งไว้ (ถ้าสูงกว่าค่าสูงสุดปัจจุบัน)
ข้อจำกัดและข้อควรระวัง
- ตารางละได้มี
AUTO_INCREMENTเพียง 1 คอลัมน์ - คอลัมน์ต้องเป็นชนิด Integer (TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT)
- ต้องเป็น Key (Primary Key หรือ Unique Key)
- ไม่สามารถตั้งค่าติดลบได้
- เมื่อถึงค่าสูงสุดของชนิดข้อมูล จะเกิด Error (ใช้ BIGINT เพื่อป้องกัน)
ฟังก์ชันที่เกี่ยวข้อง
LAST_INSERT_ID()- ดูค่า AUTO_INCREMENT ที่เพิ่ง Insert (Session-safe)SHOW TABLE STATUS LIKE 'table_name'- ดูค่า Auto_increment ปัจจุบัน