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

สร้างลำดับตัวเลขอัตโนมัติใน MySQL ด้วย AUTO_INCREMENT

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 ปัจจุบัน