三、MySQL自增列
注意: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; // 查看表信息
仅记录自己的学习总结,如有错误,还请评论指正~