注意:1、對於自增列,必須是索引(含主鍵)
2、對於自增可以設置步長和起始值
一、關於起始值
//創建一張表,設置id為主鍵,且自增 create table t3( id int primary key auto_increment, name varchar(20) ); //向表中插入兩條數據 insert into t3(name) values('test1'); insert into t3(name) values('只貓'); //查看表的內容 mysql> select * from t3; +----+-------+ | id | name | +----+-------+ | 1 | test1 | | 2 | 只貓 | +----+-------+ 2 rows in set (0.00 sec)
可以看到id列自增后的結果,起始值為1,步長為1,那么插入的下一條數據的id應為3,下面來看:
//設置自增的起始值 mysql> alter table t3 auto_increment=10; mysql> insert into t3(name) values('3333'); mysql> insert into t3(name) values('10000'); mysql> select * from t3; +----+-------+ | id | name | +----+-------+ | 1 | test1 | | 2 | 只貓 | | 10 | 3333 | | 11 | 10000 | +----+-------+ 4 rows in set (0.00 sec)
可以發現,原本應為3的id變成了10,后面再插入的數據也是從10的基礎上遞增
需要注意的是,當我們使用delete清空表時,自增列的起始值從刪除的點開始繼續自增,而不是從1開始
而truncate相當於保留了表的結構而重新建立了一張同樣的新表,即起始值為1

1 //查看建表語句,可以看到此時的初始值為12, 2 mysql> show create table t3 \G 3 *************************** 1. row *************************** 4 Table: t3 5 Create Table: CREATE TABLE `t3` ( 6 `id` int NOT NULL AUTO_INCREMENT, 7 `name` varchar(20) DEFAULT NULL, 8 PRIMARY KEY (`id`) 9 ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 10 1 row in set (0.00 sec) 11 12 mysql> truncate table t3; 13 Query OK, 0 rows affected (0.37 sec) 14 15 mysql> select * from t3; 16 Empty set (0.00 sec) 17 18 //使用truncate刪除后,初始值已經為空 19 mysql> show create table t3 \G 20 *************************** 1. row *************************** 21 Table: t3 22 Create Table: CREATE TABLE `t3` ( 23 `id` int NOT NULL AUTO_INCREMENT, 24 `name` varchar(20) DEFAULT NULL, 25 PRIMARY KEY (`id`) 26 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 27 1 row in set (0.00 sec) 28 29 30 //使用delete清空表 31 mysql> delete from t3; 32 Query OK, 4 rows affected (0.09 sec) 33 34 mysql> select * from t3; 35 Empty set (0.00 sec) 36 37 //可以看到初始值為12 38 mysql> show create table t3 \G 39 *************************** 1. row *************************** 40 Table: t3 41 Create Table: CREATE TABLE `t3` ( 42 `id` int NOT NULL AUTO_INCREMENT, 43 `name` varchar(20) DEFAULT NULL, 44 PRIMARY KEY (`id`) 45 ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 46 1 row in set (0.00 sec)
二、步長
上面我們發現,自增列的默認步長為1,那么到底是不是這樣呢?
mysql> show session variables like 'auto_inc%'; // 查看步長 +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | // 步長 | auto_increment_offset | 1 | // 初始值 +--------------------------+-------+ 2 rows in set, 1 warning (0.00 sec)
那要如何修改默認步長呢?這里有兩種級別:
一是基於會話級別(一個登陸為一個會話)
show session variables like 'auto_inc%'; // 查看自增長的默認步數 set session auto_increment_increment=10; // 設置自增長會話步長為
另外一種是基於全局模式
show global variables like 'auto_inc%'; // 查看全局變量中的自增長的默認步長 set global auto_increment_increment=10; // 設置全局會話步長
三、總結
// 設置起始值 alter table t3 auto_increment=10; // 會話級別設置自增步長 show session variables like 'auto_inc%'; set session auto_increment_increment=10; set session auto_increment_offset=1; //初始值 // 全局下修改步長 show global variables like 'auto_inc%'; set global auto_increment_increment=10; set global auto_increment_offset=1; // 用到的其他語句 show create table t3 \G // 查看建表語句 desc t3; // 查看表信息