婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > MySQL的自增ID(主鍵) 用完了的解決方法

MySQL的自增ID(主鍵) 用完了的解決方法

熱門標(biāo)簽:許昌外呼增值業(yè)務(wù)線路 咸陽防封電銷卡 廣東400企業(yè)電話申請流程 地圖標(biāo)注客戶付款 石家莊400電話辦理公司 申請400電話電話價(jià)格 新鄉(xiāng)智能外呼系統(tǒng)好處 宜賓全自動(dòng)外呼系統(tǒng)廠家 臨沂做地圖標(biāo)注

在 MySQL 中用很多類型的自增 ID,每個(gè)自增 ID 都設(shè)置了初始值。一般情況下初始值都是從 0 開始,然后按照一定的步長增加(一般是自增 1)。一般情況下,我們都是用int(11)來作為數(shù)據(jù)表的自增 ID,在 MySQL 中只要定義了這個(gè)數(shù)的字節(jié)長度,那么就會(huì)有上限。

MySQL的自增ID(主鍵) 用完了,怎么辦?

如果用 int unsigned (int,4個(gè)字節(jié) ), 我們可以算下最大當(dāng)前聲明的自增ID最大是多少,由于這里定義的是 int unsigned,所以最大可以達(dá)到2的32冪次方 - 1 = 4294967295。

這里有個(gè)小技巧,可以在創(chuàng)建表的時(shí)候,直接聲明AUTO_INCREMENT的初始值為4294967295。

create table `test` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4294967295;

SQL插入語句

insert into `test` values (null);

當(dāng)想再嘗試插入一條數(shù)據(jù)時(shí),得到了下面的異常結(jié)果。

[SQL] insert into `test` values (null);
[Err] 1062 - Duplicate entry '4294967295' for key 'PRIMARY'

說明,當(dāng)再次插入時(shí),使用的自增ID還是 4294967295,報(bào)主鍵沖突的錯(cuò)誤,這說明 ID 值達(dá)到上限之后,就不會(huì)再變化了。4294967295,這個(gè)數(shù)字已經(jīng)可以應(yīng)付大部分的場景了,如果你的服務(wù)會(huì)經(jīng)常性的插入和刪除數(shù)據(jù)的話,還是存在用完的風(fēng)險(xiǎn),建議采用 bigint unsigned ,這個(gè)數(shù)字就大了。

bigint unsigned 的范圍是 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數(shù)據(jù)(所有數(shù)字), 存儲(chǔ)大小為 8 個(gè)字節(jié)。

不過,還存在另一種情況,如果在創(chuàng)建表沒有顯示申明主鍵,會(huì)怎么辦?

如果是這種情況,InnoDB會(huì)自動(dòng)幫你創(chuàng)建一個(gè)不可見的、長度為6字節(jié)的row_id,而且InnoDB 維護(hù)了一個(gè)全局的 dictsys.row_id,所以未定義主鍵的表都共享該row_id,每次插入一條數(shù)據(jù),都把全局row_id當(dāng)成主鍵id,然后全局row_id加 1。

該全局row_id在代碼實(shí)現(xiàn)上使用的是bigint unsigned類型,但實(shí)際上只給row_id留了6字節(jié),這種設(shè)計(jì)就會(huì)存在一個(gè)問題:如果全局row_id一直漲,一直漲,直到2的48冪次-1時(shí),這個(gè)時(shí)候再+1,row_id的低48位都為0,結(jié)果在插入新一行數(shù)據(jù)時(shí),拿到的row_id就為0,存在主鍵沖突的可能性。

所以,為了避免這種隱患,每個(gè)表都需要定一個(gè)主鍵。

總結(jié)

數(shù)據(jù)庫表的自增 ID 達(dá)到上限之后,再申請時(shí)它的值就不會(huì)在改變了,繼續(xù)插入數(shù)據(jù)時(shí)會(huì)導(dǎo)致報(bào)主鍵沖突錯(cuò)誤。因此在設(shè)計(jì)數(shù)據(jù)表時(shí),盡量根據(jù)業(yè)務(wù)需求來選擇合適的字段類型。

以上就是MySQL的自增ID(主鍵) 用完了的解決方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL 自增ID(主鍵)的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL中的主鍵以及設(shè)置其自增的用法教程
  • mysql修改自增長主鍵int類型為char類型示例
  • 淺談MySQL中的自增主鍵用完了怎么辦
  • MySQL8新特性:自增主鍵的持久化詳解
  • mysql非主鍵自增長用法實(shí)例分析
  • Mysql自增主鍵id不是以此逐級(jí)遞增的處理
  • 詳解MySQL自增主鍵的實(shí)現(xiàn)
  • 為什么mysql自增主鍵不是連續(xù)的

標(biāo)簽:鎮(zhèn)江 合肥 阜新 北京 鷹潭 臺(tái)灣 日照 貴州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL的自增ID(主鍵) 用完了的解決方法》,本文關(guān)鍵詞  MySQL,的,自增,主鍵,用完,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL的自增ID(主鍵) 用完了的解決方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL的自增ID(主鍵) 用完了的解決方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 大埔区| 万州区| 六枝特区| 定陶县| 惠来县| 双辽市| 景洪市| 陇西县| 西乌珠穆沁旗| 东港市| 石棉县| 衡南县| 陆河县| 富川| 酉阳| 涡阳县| 防城港市| 麻城市| 黔西县| 邢台县| 崇阳县| 内黄县| 炎陵县| 绥宁县| 邵东县| 同江市| 宿迁市| 桐城市| 赤城县| 信阳市| 宝坻区| 房山区| 修文县| 宜城市| 屏东县| 新泰市| 香格里拉县| 石阡县| 门源| 都兰县| 勐海县|