1. 程式人生 > 實用技巧 >資料庫自增ID用完了會怎樣?

資料庫自增ID用完了會怎樣?

起步

對DBA來說這應該是送分題吧。而我是突如其來的想法想測試下的。正常來說程式設計師是不會關心自增ID用完的情況的。

以 Mysql 為例,它支援的最大的整型是 unsigned bigint,上限是 2 的 64 次次方。假設每秒記錄100萬條資料的增長,用完自增ID要58萬年以後了。

自增ID用完了會怎樣,什麼報錯

那要是真的58萬年以後了呢。就是要探究下用光了會怎樣。在我的 Mysql 5.7 它的報錯是:

SQL Error (167): Out of range value for column 'id'.

也有人在其他版本測出來的報錯是:

Duplicate entry '*****' for key 'PRIMARY'

可以看出,不同的資料庫底層實現不一樣,不同版本也有差異。只能知道會報錯,具體報錯資訊是什麼不好說,可能是資料越界,也可能是主鍵衝突。

vi設計http://www.maiqicn.com 辦公資源網站大全https://www.wode007.com

補充

另外,另一個讓程式設計師不關心自增ID用完的原因是。MySQL單機單表的處理能力是千萬級別。當單表資料達到1千萬時,MySQL效能就會開始下降,需要著手優化,這裡的瓶頸主要是查詢耗時。

我們可以通過分割槽再撐一段時間,當資料量到10億時,基本到了MySQL的極限,不分表分庫的話,業務難以持續。如果分表分庫的話那麼自增ID就很難保證唯一性,這時候就得棄用自增ID,採用其他演算法(如uuid)。

總的來說,從業務的角度來講自增ID不可能用完,單表也支撐不了那麼大的資料量。不用擔心自增ID用完的情況。