1. 程式人生 > 其它 >sql 非主鍵每年自增_MySQL自增主鍵用完了咋整

sql 非主鍵每年自增_MySQL自增主鍵用完了咋整

技術標籤:sql 非主鍵每年自增

等你點關注都等的長毛了

不知道你在使用MySQL的時候有沒有想過這個問題:MySQL自增主鍵會用完嗎?如果用完了,會發生什麼事?

我們先來看下在MySQL中,int和bigint兩種型別的值域是多少:


型別最小值最大值位元組數
int(有符號)-2^312^314
int(無符號)02^324
bigint(有符號)-2^632^638
bigint(無符號)02^648

當我們使用int(有符號)型別的時候,建立一張表:

create table test_ai (  id int(10) auto_increment primary key,  name varchar(11) not null) engine=InnoDB;

執行兩條SQL語句:

insert test_ai(id, name) values(2147483646, 'cc1');insert test_ai(name) values('cc2');insert test_ai(name) values('cc3');

當執行到第三句SQL的時候就會報錯Duplicate entry '2147483647' for key 'PRIMARY',也就是說當我們的自增主鍵用完之後,就無法繼續往表中新增資料了

解決辦法


我們在正常情況下,不會讓單表儲存那麼大的資料量,所以一般不會出現這個問題,如果真的腦抽抽的在一張表中儲存那麼多資料,或者當資料遷移的時候造成了自增主鍵混亂,那麼我們可以使用bigint(無符號)型別作為自增主鍵。

使用bigint(無符號)型別時,如果我們每秒插入1W條資料,不間斷的跑100年,單表的資料量為:10000 * 3600 * 24 * 365 * 100 = 31536000000000,還遠遠小於2^64,完全不會被用完,如果操作正確的話。

更多精彩推薦,請關注我們

c088436d989b1861a05fe21994b74df0.png

點選 “在看” 解鎖更多!