校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識(shí)庫 > 關(guān)于MySQL自增ID的一些小問題總結(jié)

關(guān)于MySQL自增ID的一些小問題總結(jié)

熱門標(biāo)簽:400電話申請(qǐng)信用卡 在哪里申請(qǐng)400電話 巫師三血與酒地圖標(biāo)注 安徽ai電話電銷機(jī)器人有效果嗎 外呼系統(tǒng)電銷受騙 銷售語音電話機(jī)器人 萊西市地圖標(biāo)注 走過哪個(gè)省地圖標(biāo)注 常州網(wǎng)絡(luò)外呼系統(tǒng)開發(fā)

下面這幾個(gè)小問題都是基于 InnoDB 存儲(chǔ)引擎的。

1. ID最大的記錄刪除后,新插入的記錄ID是什么

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

答案: 從4開始。

實(shí)驗(yàn)

創(chuàng)建表 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

查看當(dāng)前自增值:

show create table tb0;

# 結(jié)果
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從哪兒開始

例如當(dāng)前表中有ID為1,2,3三條記錄,把3刪除,重啟MySQL,新插入記錄的ID從哪兒開始?

很多人會(huì)認(rèn)為從4開始,實(shí)際是從3開始。

因?yàn)镮nnoDB的自增值是記錄在內(nèi)存的,不是記錄在數(shù)據(jù)文件的。

重啟后,會(huì)把 當(dāng)前最大ID + 1 作為起始值。

實(shí)驗(yàn)

創(chuàng)建表 tb1,ID自增:

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

添加3條數(shù)據(jù)記錄:

insert into tb1 values(null);

刪除ID為3的記錄:

delete from tb1 where id=3

通過上一個(gè)問題,我們知道,此時(shí)自增ID值為4。

重啟MySQL。

查看當(dāng)前的自增值:

show create table tb1;

# 結(jié)果
CREATE TABLE `tb1` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

3. 手動(dòng)插入ID后,下次插入時(shí)自增值是多少

例如當(dāng)前的自增ID為4,新插入記錄時(shí),手動(dòng)指定ID為10,下次使用自增方式插入時(shí),ID是 11。

ID自增值 = 當(dāng)前最大ID + 1

在插入新記錄時(shí),就已經(jīng)計(jì)算得出了新的ID值

實(shí)驗(yàn)

創(chuàng)建表 tb2,ID自增:

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

添加記錄:

insert into tb2 values(null);

手動(dòng)指定ID:

insert into tb2 values(4294967000);

查看當(dāng)前的自增值:

show create table tb2;

# 結(jié)果
CREATE TABLE `tb2` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4294967001 DEFAULT CHARSET=latin1

可以看到自增值變?yōu)?4294967001。

4. 自增值用完后怎么辦

無符號(hào) int 的最大值為 4294967295,自增值達(dá)到此值后,就不變了,新插入記錄時(shí)就會(huì)報(bào)錯(cuò):

Duplicate entry '4294967295' for key 'PRIMARY'

如果表記錄經(jīng)常插入、刪除,即使表內(nèi)記錄總量不是很大,ID也可能快速用完,這種情況可以需要使用 bigint。

int 取值范圍:

int 是 4 byte,首位用來表示符號(hào)

有符號(hào)的范圍:
從 -  至  - 1

(-2147483648 至 2147483647)

無符號(hào)的范圍:
0 至  - 1

(0 至 4294967295)

bigint 取值范圍:

int 是 8 byte

有符號(hào)的范圍:
從 -  至  - 1

(-9223372036854775808 至 9223372036854775807)

無符號(hào)的范圍:
0 至  - 1

(0 至 18446744073709551615)

小結(jié)

通過實(shí)驗(yàn)可以發(fā)現(xiàn)InnoDB中自增ID的一些特性:

插入新記錄時(shí),就會(huì)計(jì)算出新的自增值(最大ID+1),不管是使用自動(dòng)ID,還是手動(dòng)指定一個(gè)ID。

刪除最大ID值對(duì)自增ID值沒有影響,但MySQL重啟之后有影響,不會(huì)使用之前的自增ID值,而是使用最大ID+1,因?yàn)樽栽鯥D值是存在內(nèi)存中,重啟后需要重新計(jì)算。

自增ID用完后就不變了。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • MySQL的自增ID(主鍵) 用完了的解決方法
  • 關(guān)于mysql自增id,你需要知道的
  • MySQL表自增id溢出的故障復(fù)盤解決
  • 關(guān)于Mysql自增id的這些你可能還不知道
  • mysql自增id超大問題的排查與解決
  • MySQL分表自增ID問題的解決方法
  • 線上MySQL的自增id用盡怎么辦

標(biāo)簽:河北 陽江 煙臺(tái) 鞍山 黃石 果洛 來賓 赤峰

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《關(guān)于MySQL自增ID的一些小問題總結(jié)》,本文關(guān)鍵詞  關(guān)于,MySQL,自增,的,一,些小,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《關(guān)于MySQL自增ID的一些小問題總結(jié)》相關(guān)的同類信息!
  • 本頁收集關(guān)于關(guān)于MySQL自增ID的一些小問題總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 噶尔县| 霞浦县| 舒城县| 资溪县| 怀安县| 侯马市| 涞源县| 石狮市| 晋宁县| 巴林右旗| 浏阳市| 高清| 兴城市| 绥德县| 无极县| 大名县| 广州市| 奈曼旗| 元谋县| 霸州市| 平原县| 微博| 项城市| 怀安县| 仁寿县| 色达县| 双牌县| 和平县| 沧源| 邯郸市| 延津县| 大渡口区| 四平市| 邵东县| 丽水市| 九龙城区| 上饶市| 和硕县| 商洛市| 弥勒县| 台安县|