Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:重置自动增量_Mysql - Fatal编程技术网

MySQL:重置自动增量

MySQL:重置自动增量,mysql,Mysql,我正在尝试根据其中一个表中当前的行数重置该表中的自动增量值。这是我到目前为止的代码 SET @numrows = 0; SELECT COUNT(*) total, @numrows := COUNT(*) + 1 numrows FROM maj_user ; ALTER TABLE `maj_user` AUTO_INCREMENT = @numrows ; 如果我在MySQL Workbench中执行它,效果会非常好。但是,我需要将其保存为SQL文件,并将其作为数据库导入脚本的一部分执

我正在尝试根据其中一个表中当前的行数重置该表中的自动增量值。这是我到目前为止的代码

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行是ALTERTABLE语句。有什么想法吗?

你能把语法改成跳过实际设置@numrows吗?我不确定问题出在哪里,但解决办法似乎是:

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

您不应该将自动增量值设置为IFNULLMAXid、0+1或任何自动增量列吗?幸运的是,它可能与行数相同,但这绝对不可靠。在典型情况下,是的。在这种特殊情况下,MAX和COUNT相等的概率是确定无疑的。所以你从来没有删除过行吗?那么,您的自动增量是如何以错误的状态结束的呢?本应用程序的早期部分从表的末尾刮去最后x个记录,留下一组从id 1开始的特殊记录,这些记录永远不会被删除。是的,它会删除,但始终是同一组。我可以用一个解决方案来解决我提出的问题。让我们继续讨论一些旨在达到目的的问题。只是想更好地理解您的需求。错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解第1行“SELECT COUNT*+1 from maj_user”附近使用的正确语法。出于性能原因,您应该使用主键而不是*on COUNT语句。您可能可以在两个查询中执行此操作,一个用于获取,一个用于调整,如果您不太担心在旋转记录之前可能会插入记录的竞争条件,或者您准备暂时锁定表。这表明将其设置为0实际上会使其比表中的最大值高一个。在对实际表执行此操作之前,我会创建一个测试表,因为我无法验证: