CREATE TABLE insect (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
date DATE NOT NULL,
origin VARCHAR(30) NOT NULL
);
INSERT INTO insect (name, date, origin) VALUES
('housefly', '2001-09-10', 'kitchen'),
('millipede', '2001-09-10', 'driveway'),
('grasshopper', '2001-09-10', 'front yard');
插入時 id 給 NULL 或 0 或省略,MySQL 自動分配 1,2,3…
| 語言/接口 | 方法 |
|---|---|
| SQL | LAST_INSERT_ID()(會話級,安全) |
| PHP mysqli | $mysqli->insert_id 或 $stmt->insert_id |
| PDO | $pdo->lastInsertId() |
| Perl DBI | $dbh->{mysql_insertid} |
| C API | mysql_insert_id() |
-- 刪除自增列再重建,會按當前行順序重新編號 1,2,3... ALTER TABLE insect DROP id; ALTER TABLE insect ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id);
警告:若被其他表外鍵引用,會導致關聯斷裂。僅在確定無關聯時使用。
-- 建表時指定 CREATE TABLE insect (id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100 PRIMARY KEY, ...); -- 修改現有表 ALTER TABLE insect AUTO_INCREMENT = 100;
下一條插入的 ID 將從 100 開始(前提是無衝突)。
MySQL 8.0+ 支持 CREATE SEQUENCE:
CREATE SEQUENCE seq_order START WITH 1 INCREMENT BY 1; SELECT NEXT VALUE FOR seq_order; -- 獲取下一值 SELECT LAST_VALUE FOR seq_order; -- 獲取當前值
適用於多表共享全局唯一 ID、分庫分表 ID 生成等場景。