AUTO_INCREMENT可以在創建表的時候設定初始值。
當然,建表完成后,可以使用ALTER TABLE `表名` AUTO_INCREMENT = m來重設自增初始值
- 當ENGINE=MyISAM,MySQL會選擇數據表中的AUTO_INCREMENT列的最大值+1和m中的較大值作為新的AUTO_INCREMENT值
- 當ENGINE=InnoDB,如果AUTO_INCREMENT小於當前數據表中的AUTO_INCREMENT列的最大值+1,則MySQL不會做任何操作
但是,使用alter,會使得MySQL對整個表加鎖,不能修改,影響正常服務。如果表里的數據量非常大,則復制數據會相當的花時間。
所以,我們可以使用以下的方法去修改AUTO_INCREMENT,
1. 增大AUTO_INCREMENT
首先插入一行傀儡數據,插入時將該行數據的ID設置為AUTO_INCREMENT的目標值-1。進行此操作后,則AUTO_INCREMENT會自動變為你所需要設置的目標值。
2. 減小AUTO_INCREMENT
這種方法只適用於使用InnoDB引擎的表,因為在InnoDB中,使用的是內存自增計數器,也就是說,AUTO_INCREMENT不會寫入到硬盤中。使用InnoDB的表在數據庫重啟后,會根據當前AUTO_INCREMENT列的最大ID設置AUTO_INCREMENT的值,而MyISAM的表不會。
首先刪除所有比目標值大的ID的行,然后重啟數據庫,再使用之前改大的方法設置AUTO_INCREMENT