在MySQL中,數據都是有長度大小的,比如,int、varchar、char等。Int類型的數據的范圍的如下:
一般情況下每一個主鍵id的初始值都是從 0 開始的,然后按照一定的步長逐步增加。在 MySQL 中只要定義了這個數的字節長度,那么就會有上限。
數據表定義的自增 ID,如果達到上限之后。再申請下一個 ID 的時候,獲得到的值將保持不變。
下面通過實驗來驗證一下:
我們創建了一個表test,同時將自增id的初始值設置為4294967295,也就是假設現在自增id只剩下一個。
第一次 insert 時,記錄創建成功,此時id為4294967295。但是,當我再次 insert 時,結果出現了下面的這個錯誤:
從這個結果我們可以看到,第一次插入數據的時候 id 值還是 4294967295,而當第二次插入數據時,則報主鍵沖突錯誤了,這說明自增 id 的值達到上限之后,就不會再變化了。
這剛好印證了我們上面說的。
所以,在設計數據表時,我們應該盡量根據業務需求來選擇合適的字段類型。同時,當發現表中數據較多,自增id快用完時,要及時分表、分庫,以避免此問題發生。