2013-04-01 122 views
2

我想根據當前的行數重置我的表中的自動增量值。這是我迄今爲止的代碼。MySQL:重置AUTO_INCREMENT

SET @numrows = 0; 

SELECT COUNT(*) total, @numrows := COUNT(*) + 1 numrows FROM maj_user ; 
ALTER TABLE `maj_user` AUTO_INCREMENT = @numrows ; 

這很好,如果我在MySQL Workbench中執行它。但是,我需要將其保存爲SQL文件並將其作爲數據庫導入腳本的一部分執行。如果我這樣做,我得到這個:

ERROR 1064 (42000) at line 39: You have an error in your SQL syntax; check the 
manual that corresponds to your MySQL server version for the right syntax to 
use near '@numrows' at line 1 

39行是ALTER TABLE語句。有任何想法嗎?

+0

你不是應該設置'AUTO_INCREMENT'值'IFNULL(MAX(ID),0)+ 1'或無論你的自動遞增列是什麼?僥倖它可能與行數相同,但這絕不是可靠的。 – tadman

+0

在典型情況下,是的。在這種特殊情況下,MAX和COUNT相等的概率是確定的。 – Tanoro

+0

所以你永遠不會*刪除行嗎?那麼你的'AUTO_INCREMENT'如何以錯誤的狀態結束呢? – tadman

回答

0

你可以改變你的語法來跳過實際設置@numrows嗎?我不知道是什麼問題,但解決方法似乎是這樣的:

ALTER TABLE `maj_user` AUTO_INCREMENT = (SELECT COUNT(*) + 1 from maj_user); 
+0

錯誤代碼:1064.您的SQL語法錯誤;請檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'(SELECT COUNT(*)+ 1 from maj_user')附近使用正確的語法。 – Tanoro

+0

爲了性能原因,您應該在count語句中使用主鍵而不是*。 – hd1

+0

與上面相同的錯誤hd1。 – Tanoro