mysql 未定義主鍵,mysql 如何處理?

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了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章