MySQL 序列

MySQL 没有独立 SEQUENCE,靠 AUTO_INCREMENT 实现自增。

Beginner
Key Points需要跨表或自定义步长的「序列」时,可用一张计数器表模拟。

AUTO_INCREMENT

SQL
CREATE TABLE seq_demo (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  v  VARCHAR(20)
);
INSERT INTO seq_demo (v) VALUES ('a'), ('b');
SELECT * FROM seq_demo;
Output
+----+------+
| id | v    |
+----+------+
|  1 | a    |
|  2 | b    |
+----+------+

自定义序列表

SQL
CREATE TABLE seq (name VARCHAR(20) PRIMARY KEY, val INT NOT NULL);
INSERT INTO seq VALUES ('order_no', 1000);
-- 取号并自增(事务内)
UPDATE seq SET val = LAST_INSERT_ID(val + 1) WHERE name = 'order_no';
SELECT LAST_INSERT_ID();
Output
+------------------+
| LAST_INSERT_ID() |
+------------------+
|             1001 |
+------------------+
PostgreSQL has a native SEQUENCE; MySQL doesn't, so AUTO_INCREMENT is the norm. For 'date + sequence' order numbers, let the auto-increment handle the number and prepend the date in app code.

Friends & Partners