【发布时间】:2013-03-22 21:41:45
【问题描述】:
我正在尝试根据其中一个表中当前的行数来重置其中一个表中的自动增量值。这是我到目前为止的代码。
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 语句。有什么想法吗?
【问题讨论】:
-
您不应该将
AUTO_INCREMENT值设置为IFNULL(MAX(id),0)+1或您的自动递增列吗?侥幸它可能与行数相同,但这绝不是可靠的。 -
在典型情况下,是的。在这种特殊情况下,MAX 和 COUNT 相等的概率是确定的。
-
所以你从来没有,曾经删除行?那么你的
AUTO_INCREMENT是如何进入错误状态的呢? -
此应用程序的早期部分从表末尾删除最后 x 条记录,留下一组从 id #1 开始的特殊记录,这些记录永远不会被删除。是的,它确实删除了,但总是相同的集合。我可以使用我提出的问题的解决方案。让我们继续回答旨在解决问题的问题。
-
只是想更好地了解您的要求。
标签: mysql