簡體   English   中英

更新InnoDB表中的auto_increment值

[英]Updating auto_increment value in an InnoDB table

簡短版:我可以以編程方式更新表上的auto_increment值嗎? 我正在嘗試通過mysql init_file來執行此操作,因此它會在啟動時發生,但我看不到它起作用。

USE theDb;

SELECT max(maxid) FROM (SELECT max(RegistrationId)+1 maxid FROM Registration
UNION
SELECT max(RegistrationId)+1 maxid FROM RegistrationArchive) t into @maxId;

ALTER TABLE Registration AUTO_INCREMENT=@maxId;

較長的版本:我有一個帶有InnoDB表的mysql數據庫。 一個表(包含注冊信息)具有一個自動遞增列,當處理一行時,它將被復制到第二個存檔表,並從第一個存檔表中刪除。 存檔表沒有自動遞增列。 (順便說一句,不是我的設計...)

問題是,由於某種原因(很少見)重新啟動數據庫時,第一個表將重新計算下一個增量值-InnoDB的功能。 該表通常是空的或很小,並且計算出的下一個增量將對應於已使用且在存檔表中的ID。 數據被移到了可以的存檔位置,但之后的后續處理將無法正常工作。

我知道這已經晚了,但是在問了這個相關問題之后 ,我發現sql語句的某些部分需要是文字,不能用user_defined_variables代替。 如果需要更改SQL語句的此類部分,則需要使用准備好的語句

因此,您需要執行以下操作:

SET @`stmt_alter` := CONCAT('ALTER TABLE `Registration` AUTO_INCREMENT = ', @`maxId`);
PREPARE `stmt` FROM @`stmt_alter`;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM