sql 非主鍵每年自增_MySQL自增主鍵用完了咋整
阿新 • • 發佈:2020-12-19
技術標籤:sql 非主鍵每年自增
等你點關注都等的長毛了
不知道你在使用MySQL的時候有沒有想過這個問題:MySQL自增主鍵會用完嗎?如果用完了,會發生什麼事?
我們先來看下在MySQL中,int和bigint兩種型別的值域是多少:
型別 | 最小值 | 最大值 | 位元組數 |
int(有符號) | -2^31 | 2^31 | 4 |
int(無符號) | 0 | 2^32 | 4 |
bigint(有符號) | -2^63 | 2^63 | 8 |
bigint(無符號) | 0 | 2^64 | 8 |
當我們使用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,完全不會被用完,如果操作正確的話。
更多精彩推薦,請關注我們
點選 “在看” 解鎖更多!