1. 程式人生 > 其它 >mysql自增主鍵(int型別)達到最大值導致任務報錯

mysql自增主鍵(int型別)達到最大值導致任務報錯

技術標籤:MySQL

在mysql中int型別佔四個位元組,有符號書的話,最大值就是(2^31)-1,也就是2147483647,二十多億。
然後如果這個自增主鍵達到最大值,是會報錯的

Duplicate entry '2147483647' for key 'PRIMARY'


錯誤翻譯過來的意思大概是主鍵2147483647重複了。

解決方法:

①、修改id欄位型別,int改為bigint(太佔空間了,一個bigint的儲存大小為8位元組)bigint的大小是8個位元組,一個位元組8位,有符號的最大值就是2的63次方-1

②、有能力還是分表,有效避免這個問題

③、將int型別設定為無符號的可以擴大一倍

有符號int最大可以支援到約22億,遠遠大於我們的需求和MySQL單表所能支援的效能上限。

對於OLTP應用來說,單表的規模一般要保持在千萬級別,不會達到22億上限。如果要加大預留量,可以把主鍵改為改為無符號int,上限為42億,這個預留量已經是非常的充足了。
使用bigint,會佔用更大的磁碟和記憶體空間,記憶體空間畢竟有限,無效的佔用會導致更多的資料換入換出,額外增加了IO的壓力,對效能是不利的。

因此推薦自增主鍵使用int unsigned型別,但不建議使用bigint

有能力選擇分表,更好解決這個問題。

在這裡插入圖片描述