2013-04-01 120 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