三、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;    // 查看表信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM