Mariadb

MariaDB 索引在刪除數據庫並重新創建後不會從 1 開始

  • March 22, 2021

我目前正在試驗一個數據庫驅動的應用程序。如果它的數據庫不存在,它會自動設置它的數據庫表,所以我很容易刪除數據庫並從頭開始。在這些實驗中,我注意到在這樣一個全新的開始之後,db-indices 不再從 1 開始,而是繼續計數,就好像數據庫從未被刪除一樣。

所以似乎僅僅刪除數據庫是不夠的。最後的索引是記憶體在某個地方還是保存在記憶體中 - 我是否需要重新啟動 MariaDB 才能在重置後獲得“真正新鮮的”索引?

(它不會影響軟體,但我擔心我可能清理得不夠好……)

這是一個範例:表migrations是使用創建的

CREATE TABLE `migrations` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `migration` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
 `batch` int(11) NOT NULL,
 `exec_ts` datetime DEFAULT current_timestamp(),
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

查看目前內容,有 4 條記錄,id從 24 到 27。刪除 db 並完成創建後,我看到相同的值。好的,所以不知何故,它們的基數沒有改變——但為什麼自動生成的索引不從 1 開始呢?

瀏覽了一下,我發現information_schema.TABLES它有這個表的記錄,並且AUTO_INCREMENT確實顯示了當我手動創建一個記錄時下一條記錄得到的值。我已經驗證刪除數據庫也刪除了該記錄,但它必須“隱藏”在其他地方……

查看目前內容,有 4 條 id 從 24 到 27 的記錄。刪除 db 並完成創建後,我看到相同的值。好的,所以不知何故,它們的基數沒有改變——但為什麼自動生成的索引不從 1 開始呢?

由於數據庫是由他的應用程序重新創建的,並且應用程序將這些行作為重新創建的一部分插入,所以它完全掌握在應用程序的手中。應用程序可能會使用 auto_increment=1 重新創建表,但隨後會插入這些行並故意指定 PK 值。或者,它正在重新創建表,但 auto_increment=24,所以當它插入行時,它們從那個值開始。您可以嘗試自己手動重新創建表,無需任何行且 auto_increment=1。

瀏覽了一下,我發現 information_schema.TABLES 有該表的記錄,而 AUTO_INCREMENT 確實顯示了我手動創建下一條記錄時獲得的值。我已經驗證刪除數據庫也刪除了該記錄,但它必須“隱藏”在其他地方……

是的,開始值似乎隱藏在應用程序中。

引用自:https://dba.stackexchange.com/questions/287404