成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

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

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、江岸網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、江岸網(wǎng)絡(luò)營(yíng)銷、江岸企業(yè)策劃、江岸品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供江岸建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:jinyejixie.com

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

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

答案: 從4開(kāi)始。

實(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從哪兒開(kāi)始

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

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

因?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

通過(guò)上一個(gè)問(wèn)題,我們知道,此時(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. 自增值用完后怎么辦

無(wú)符號(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,首位用來(lái)表示符號(hào)

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

(-2147483648 至 2147483647)

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

(0 至 4294967295)

bigint 取值范圍:

int 是 8 byte

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

(-9223372036854775808 至 9223372036854775807)

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

(0 至 18446744073709551615)

小結(jié)

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

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

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

自增ID用完后就不變了。

總結(jié)

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

標(biāo)題名稱:關(guān)于MySQL自增ID的一些小問(wèn)題總結(jié)
標(biāo)題網(wǎng)址:http://jinyejixie.com/article12/jjphdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)軟件開(kāi)發(fā)、App設(shè)計(jì)、定制開(kāi)發(fā)標(biāo)簽優(yōu)化、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
嘉黎县| 花莲县| 都匀市| 承德县| 福鼎市| 拉萨市| 镇巴县| 环江| 环江| 建昌县| 鄂托克前旗| 滨州市| 界首市| 和顺县| 亚东县| 建始县| 垦利县| 莫力| 滨州市| 定远县| 黔西县| 肇源县| 扎鲁特旗| 海晏县| 徐州市| 双城市| 清镇市| 西吉县| 无锡市| 嘉定区| 广饶县| 五华县| 广安市| 巫溪县| 台东市| 巨鹿县| 长宁区| 辽阳县| 梅河口市| 鸡西市| 墨竹工卡县|