mysql自增主鍵(int型別)達到最大值導致任務報錯
阿新 • • 發佈:2021-01-17
技術標籤: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
有能力選擇分表,更好解決這個問題。