MariaDB 索引在刪除數據庫並重新創建後不會從 1 開始
我目前正在試驗一個數據庫驅動的應用程序。如果它的數據庫不存在,它會自動設置它的數據庫表,所以我很容易刪除數據庫並從頭開始。在這些實驗中,我注意到在這樣一個全新的開始之後,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 確實顯示了我手動創建下一條記錄時獲得的值。我已經驗證刪除數據庫也刪除了該記錄,但它必須“隱藏”在其他地方……
是的,開始值似乎隱藏在應用程序中。