三、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)
View Code

二、步长

上面我们发现,自增列的默认步长为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;    // 查看表信息

 

posted @ 2020-12-03 22:07  只猫  阅读(1608)  评论(0编辑  收藏  举报