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

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

 更新時間:2020年09月11日 11:01:49   作者:銘之博客  
這篇文章主要介紹了MySQL的自增ID(主鍵) 用完了的解決方法,幫助大家更好的理解和學習MySQL數據庫,感興趣的朋友可以了解下

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

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

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

這里有個小技巧,可以在創(chuàng)建表的時候,直接聲明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);

當想再嘗試插入一條數據時,得到了下面的異常結果。

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

說明,當再次插入時,使用的自增ID還是 4294967295,報主鍵沖突的錯誤,這說明 ID 值達到上限之后,就不會再變化了。4294967295,這個數字已經可以應付大部分的場景了,如果你的服務會經常性的插入和刪除數據的話,還是存在用完的風險,建議采用 bigint unsigned ,這個數字就大了。

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

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

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

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

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

總結

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

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

相關文章

  • 在Debian 9系統上安裝Mysql數據庫的方法教程

    在Debian 9系統上安裝Mysql數據庫的方法教程

    這篇文章主要給大家介紹了在Debian 9系統上安裝Mysql數據庫的方法教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • MHA實現mysql主從數據庫手動切換的方法

    MHA實現mysql主從數據庫手動切換的方法

    這篇文章主要介紹了MHA實現mysql主從數據庫手動切換的方法,詳細的講述了主從數據庫切換的步驟與方法,非常實用,需要的朋友可以參考下
    2014-10-10
  • MySQL的中文UTF8亂碼問題

    MySQL的中文UTF8亂碼問題

    MySQL從4.x版本開始支持Unicode,3.x只有l(wèi)atin1編碼。剛工作的時候就開始用MySQL了,用的php存取,網頁xxx.php是gb2312的編碼,存進去的數據用php取出來是中文,用phpMyAdmin執(zhí)行select、update、dump都是中文,沒有亂碼問題。
    2010-05-05
  • MySQL 慢查詢日志的開啟與配置

    MySQL 慢查詢日志的開啟與配置

    這篇文章主要介紹了MySQL 慢查詢日志的開啟與配置的方法,幫助大家更好的理解和使用MySQL數據庫,感興趣的朋友可以了解下
    2020-12-12
  • MySQL 中 datetime 和 timestamp 的區(qū)別與選擇

    MySQL 中 datetime 和 timestamp 的區(qū)別與選擇

    MySQL 中常用的兩種時間儲存類型分別是datetime和 timestamp。如何在它們之間選擇是建表時必要的考慮。下面就談談他們的區(qū)別和怎么選擇,需要的朋友可以參考一下
    2021-09-09
  • MySQL數據庫之聯合查詢?union

    MySQL數據庫之聯合查詢?union

    這篇文章主要介紹了MySQL數據庫之聯合查詢?union,聯合查詢就是將多個查詢結果的結果集合并到一起,字段數不變,多個查詢結果的記錄數合并,下文詳細介紹需要的小伙伴可以參考一下
    2022-06-06
  • mysql建立自定義函數的問題

    mysql建立自定義函數的問題

    由于這幾天在寫mysql存儲過程且發(fā)現程序體積越來越龐大,于是嘗試使用mysql的函數
    2011-04-04
  • MySQL表的內外連接和視圖使用實戰(zhàn)練習

    MySQL表的內外連接和視圖使用實戰(zhàn)練習

    這篇文章主要給大家介紹了關于MySQL表的內外連接和視圖使用的相關資料,MySQL的內外連接查詢是用于將兩個或多個表中的數據進行關聯查詢的一種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • MySQL創(chuàng)建定時任務

    MySQL創(chuàng)建定時任務

    本文詳細講解了MySQL創(chuàng)建定時任務的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • Mac下安裝mysql5.7.18的詳細步驟

    Mac下安裝mysql5.7.18的詳細步驟

    這篇文章主要為大家詳細介紹了]Mac下安裝mysql5.7.18的詳細步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論

电白县| 苏尼特右旗| 商河县| 东至县| 平昌县| 上栗县| 贡觉县| 霍林郭勒市| 崇阳县| 湘阴县| 巫溪县| 门源| 秦皇岛市| 宜兴市| 新蔡县| 中西区| 荆门市| 咸宁市| 阿拉善左旗| 花垣县| 大余县| 浮山县| 航空| 临夏县| 岳普湖县| 黎城县| 尉犁县| 通渭县| 珠海市| 大庆市| 旬邑县| 许昌市| 平果县| 永定县| 台江县| 永吉县| 岳池县| 双江| 淮北市| 汽车| 广汉市|