下面這幾個小問題都是基於 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 說明...