InnoDB會自動幫你創建一個不可見的、長度爲6字節的row_id,而且InnoDB維護了一個全局的dictsys.row_id,所以未定義主鍵的表都會共享該row_id,每次插入一條數據都把全局row_id當成主鍵id,然後全局row_id加1。
該全局row_id在代碼實現上使用的事bigint unsigned類型,但實際上只給row_id保留了6字節,所以這種設計就會存在一個問題:如果全局row_id一直漲,直到2的48次冪-1時,這個時候再加1,row_id的低48位都會變爲0,如果再插入新一行數據時,拿到的row_id就爲0,這樣的話就存在主鍵衝突的可能,所以爲了避免這種隱患,每個表都需要一個主鍵。
2的48次方應該沒有bigIn(19)大
類似於一個閉環 ,能放五個數12345,再放就是1了