關於MySQL自增ID的一些小問題總結

2022-09-25 03:57:10 字數 2702 閱讀 2565

下面這幾個小問題都是基於 innodb 儲存引擎的。

1. id最大的記錄刪除後,新插入的記錄id是什麼

例如當前表中有id為1,2,3三條記錄,把3刪除,新插入記錄的id從哪兒開始?

答案: 從4開始。

實驗建立表 tb0,id自增:

create table tb0(id int unsigned auto_increment primary key);

插入3條記錄:

insert into tb0 values(null);

刪除id為3的記錄:

delete from tb0 where id=3

檢視當前自增值:

show create table tb0;

# 結果

create table `tb0` (

`id` int(10) unsigned not null auto_increment,

primary key (`id`)

) engine=innodb auto_increment=4 default charset=latin1

自增id為4,刪除id最大的記錄並不影響自增id的值。

2. mysql 重啟後自增id從哪兒開始

例如當前表中有id為1,2,3三條記錄,把3刪除,重啟mysql,新插入記錄的id從哪兒開始?

很多人會認為從4開始,實際是從3開始。

因為innodb的自增值是記錄在記憶體的,不是記錄在資料檔案的。

重啟後,會把 當前最大id + 1 作為起始值。

實驗建立表 tb1,id自增:

create table tb1(id int unsigned auto_increment primary key);

新增3條資料記錄:

insert into tb1 values(null);

刪除id為3的記錄:

delete from tb1 where id=3

通過上乙個問題,我們知道,此時自增id值為4。

重啟mysql。

檢視當前的自增值:

show create table tb1;

# 結果

create table `tb1` (

`id` int(10) unsigned not null autodjxjprbm_increment,

primary key (`id`)

) engine=innodb auto_increment=3 default charset=latin1

3. 手動插入id後,下次插入時自增值是多少

例如當前的自增id為4,程式設計客棧新插入記錄時,手動指定id為10,下次使用自增方式插入時,id是 11。

id自增值 = 當前最大id + 1

在插入新記錄時,就已經計算得出了新的id值

實驗建立表 tb2,id自增:

create table tb2(id int unsigned auto_increment primary key);

新增記錄:

insert into tb2 values(null);

手動指定id:

insert into tb2 values(4294967000);

檢視當前的自增值:

show c table tb2;

# 結果

create table `tb2` (

`id` int(10) unsigned not null auto_increment,

primary key (`id`)

) engine=innodb auto_increment=4294967001 default charset=latin1

可以看到自增值變為 4294967001。

4. 自增值用完後怎麼辦

無符號 int 的最大值為 4294967295,自增值達到此值後,就不變了,新插入記錄時就會報錯:

duplicate entry '4294967295' for key 'primary'

如果表記錄經常插入、刪除,即使表內記錄總量不是很大,id也可能快速用完,這種情況可以需要使用 bigint。

int 取值範圍:

int 是程式設計客棧 4 byte,首位用來表示符號

有符號的範圍:

從 -  至  - 1

(-2147483648 至 2147483647)

無符號的範圍:

0 至  - 1

(0 至 4294967295)

bigint 取值範圍:

int 是 8 byte

有符號的範圍:

從 -  至  - 1

(-9223372036854775808 至 9223372036854775807)

無符號的範圍:

0 至  - 1

(0 至 18446744073709551615)

小結通過實驗可以發現innodb中自增id的一些特性:

插入新記錄時,就會計算出新的自增值(最大id+1),不管是使用自動id,還是手動指定乙個id。

刪除最大id值對自增id值沒有影響,但mysql重啟之後有影響,不會使用之前的自增id值,而是使用最大id+1,因為自增id值是存在記憶體中,重啟後需

總結要重新計算。

自增id用完後就不變了。

本文標題: 關於mysql自增id的一些小問題總結

本文位址: /shujuku/mysql/286823.html

mysql 實現id自增序列 mysql自增id列

如果希望在每次插入新記錄時,自動地建立主鍵欄位的值。可以在表中建立乙個 auto increment 字段。mysql 使用 auto increment 關鍵字來執行 auto increment 任務。預設地auto increment 的開始值是 1,每條新記錄遞增 1。主鍵又稱主關鍵字,主關...

關於自增ID的弊端

如果現在公司的資料庫 old db table1 有以下記錄 1 a2 b 3 c4 d 以上 1 4 是公司自用資料 a使用者新增一條記錄 e 即5 e 現在新的資料庫公司的new db table1 的資料要更新 1 a2 b 3 c4 d 5 l6 m 以上 1 6 是公司自用資料 那麼使用者...

mysql自增id重置

參考 使用truncate truncate table 說明 使用truncate會刪除表的資料釋放空間,並且重置字自增id,但不會刪除表的定義。用處 需要清空表的時候才能使用。使用修改標識 dbcc checkident table name reseed,new reseed value 說明...