最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年11月17日 16:30:09   作者:性能與架構(gòu)  
這篇文章主要給大家總結(jié)介紹了關(guān)于MySQL自增ID的一些小問題,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

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

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

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

答案: 從4開始。

實驗

創(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從哪兒開始?

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

因為InnoDB的自增值是記錄在內(nèi)存的,不是記錄在數(shù)據(jù)文件的。

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

實驗

創(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

通過上一個問題,我們知道,此時自增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. 手動插入ID后,下次插入時自增值是多少

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

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

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

實驗

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

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

添加記錄:

insert into tb2 values(null);

手動指定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. 自增值用完后怎么辦

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

Duplicate entry '4294967295' for key 'PRIMARY'

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

int 取值范圍:

int 是 4 byte,首位用來表示符號

有符號的范圍:
從 -  至  - 1

(-2147483648 至 2147483647)

無符號的范圍:
0 至  - 1

(0 至 4294967295)

bigint 取值范圍:

int 是 8 byte

有符號的范圍:
從 -  至  - 1

(-9223372036854775808 至 9223372036854775807)

無符號的范圍:
0 至  - 1

(0 至 18446744073709551615)

小結(jié)

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

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

刪除最大ID值對自增ID值沒有影響,但MySQL重啟之后有影響,不會使用之前的自增ID值,而是使用最大ID+1,因為自增ID值是存在內(nèi)存中,重啟后需要重新計算。

自增ID用完后就不變了。

總結(jié)

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

相關(guān)文章

  • 如何搭建 MySQL 高可用高性能集群

    如何搭建 MySQL 高可用高性能集群

    MySQL 作為小型應(yīng)用的數(shù)據(jù)庫,它完全可以勝任,但是如果是大型應(yīng)用,高性能高可用的要求,單服務(wù)器部署的MySQL就不夠了。MySQL NDB Cluster為這個需求提供了一個官方的集群解決方案。本文將研究如何搭建 MySQL 高可用高性能集群
    2021-06-06
  • 關(guān)于MySQL的存儲過程與存儲函數(shù)

    關(guān)于MySQL的存儲過程與存儲函數(shù)

    存儲過程是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL?語句集(這些SQL語句已經(jīng)編譯過了),它存儲在數(shù)據(jù)庫中,一次編譯后永久有效,需要的朋友可以參考下
    2023-05-05
  • MySQL忘記root密碼錯誤號碼1045的解決辦法

    MySQL忘記root密碼錯誤號碼1045的解決辦法

    這篇文章主要介紹了MySQL忘記root密碼錯誤號碼1045的解決辦法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • MySQL用命令行運行sql文件的詳細圖文教程

    MySQL用命令行運行sql文件的詳細圖文教程

    最近重新踩了一下mysql 這邊的坑,記錄一下自己忽略的地方,下面這篇文章主要給大家介紹了關(guān)于MySQL用命令行運行sql文件的詳細圖文教程,文中通過實例代碼的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Mysql中g(shù)roup by 使用中發(fā)現(xiàn)的問題

    Mysql中g(shù)roup by 使用中發(fā)現(xiàn)的問題

    當(dāng)使用MySQL的GROUP BY語句時,根據(jù)指定的列對結(jié)果進行分組,這種情況通常是由于在 GROUP BY 中選擇的字段與其他非聚合字段不兼容,或者在 SELECT 子句中沒有正確使用聚合函數(shù)所導(dǎo)致的,本文給大家介紹Mysql中g(shù)roup by 使用中發(fā)現(xiàn)的問題,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Mysql行轉(zhuǎn)列把逗號分隔的字段拆分成多行兩種方法

    Mysql行轉(zhuǎn)列把逗號分隔的字段拆分成多行兩種方法

    在數(shù)據(jù)庫中有時候我們需要將一些行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù),這在處理數(shù)據(jù)透視表、報表生成等場景下非常常見,這篇文章主要給大家介紹了關(guān)于Mysql行轉(zhuǎn)列把逗號分隔的字段拆分成多行的兩種方法,需要的朋友可以參考下
    2024-05-05
  • MySQL中的UTF-8與UTF8MB4:差異解析方式

    MySQL中的UTF-8與UTF8MB4:差異解析方式

    MySQL中UTF-8和UTF8MB4的區(qū)別在于編碼范圍、存儲需求和兼容性,UTF-8可以表示大多數(shù)常見的字符,但對于一些罕見的字符和emoji表情等,可能無法正確表示,而UTF8MB4則可以表示幾乎所有的Unicode字符,包括那些UTF-8無法表示的字符,在選擇字符集時
    2024-12-12
  • mysql中 ${param}與#{param}使用區(qū)別

    mysql中 ${param}與#{param}使用區(qū)別

    這篇文章主要介紹了mysql中 ${param}與#{param}使用區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • MySQL使用MyFlash快速恢復(fù)誤刪除和修改的數(shù)據(jù)

    MySQL使用MyFlash快速恢復(fù)誤刪除和修改的數(shù)據(jù)

    MyFlash 是由美團點評公司技術(shù)工程部開發(fā)并維護的一個開源工具,主要用于MySQL數(shù)據(jù)庫的DML操作的回滾,MyFlash的優(yōu)勢在于它提供了更多的過濾選項,使得回滾操作變得更加容易,本文將實驗通過 MyFlash 工具快速恢復(fù)誤刪除 或 誤修改的數(shù)據(jù),需要的朋友可以參考下
    2024-06-06
  • 詳解MySQL中timestamp和datetime時區(qū)問題導(dǎo)致做DTS遇到的坑

    詳解MySQL中timestamp和datetime時區(qū)問題導(dǎo)致做DTS遇到的坑

    datetime和timestamp這兩種類型都是用于表示年月日時分秒格式的數(shù)據(jù),那么他們有那么區(qū)別,本文就詳細的介紹一下MySQL timestamp和datetime坑,文中通過示例代碼介紹的非常詳細,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

肃北| 德钦县| 石泉县| 延寿县| 荔波县| 同德县| 五家渠市| 张家港市| 宁夏| 江都市| 峨山| 广河县| 九龙坡区| 湘阴县| 大竹县| 四子王旗| 夏河县| 灵武市| 新巴尔虎左旗| 安仁县| 定兴县| 新丰县| 江川县| 芒康县| 繁峙县| 吉林市| 朝阳区| 左云县| 闸北区| 拜泉县| 宝兴县| 财经| 马公市| 福泉市| 岢岚县| 盐亭县| 阳西县| 光山县| 武川县| 温州市| 太和县|