首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 序列實戰:AUTO_INCREMENT 獲取值、重排序、自定義起始值

     編輯:MySQL 綜合教學

最簡單方式:自增列

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…

獲取最後自增 ID

語言/接口方法
SQLLAST_INSERT_ID()(會話級,安全)
PHP mysqli$mysqli->insert_id 或 $stmt->insert_id
PDO$pdo->lastInsertId()
Perl DBI$dbh->{mysql_insertid}
C APImysql_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 開始(前提是無衝突)。

進階:模擬 Oracle Sequence

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 生成等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved