基本上我想要的是以下代码的工作版本:
ALTER TABLE table_name AUTO_INCREMENT = ( SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'another_table_name' );
错误:
1064 - 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 'AUTO_INCREMENT =
原因:
根据MySQL Doc:
只要服务器运行,InnoDB就会使用内存中的自动增量计数器。如前所述,当服务器停止并重新启动时,InnoDB将为该表的第一个INSERT重新初始化每个表的计数器。
这意味着每当我重新启动服务器时,我的auto_increment值都将设置为最小。
我有一个叫的表ticket,另一个叫的表ticket_backup。他们两个都有id共享的列。ticket表格中的记录可用,并且可由客户声明。当他们要求时,ticket我将记录插入其中ticket_backup,然后从ticket表中删除它们。截至今天为止,我已经56 thousand在(里面ticket_backup)索取了票并且有0张票。如果我现在重新启动服务器并且不执行ALTER TABLE,那么我提供的第一个票证将id 1是已经被ID占用的票证ticket_backup,因此,如果我不解决自动递增值,则会导致重复键错误。我之所以希望在单个查询中执行此操作,是为了能够在服务器启动时轻松执行该查询。
ticket
ticket_backup
id
56 thousand
ALTER TABLE
id 1
试试这个:
SELECT `AUTO_INCREMENT` INTO @AutoInc FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'another_table_name'; SET @s:=CONCAT('ALTER TABLE `database_name`.`table_name` AUTO_INCREMENT=', @AutoInc); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;