ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql – 选择结果改变AUTO_INCREMENT值

2019-07-25 04:15:55  阅读:291  来源: 互联网

标签:sql mysql select auto-increment alter-table


基本上我想要的是以下代码的工作版本:

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 uses the in-memory auto-increment counter as long as the server
runs. When the server is stopped and restarted, InnoDB reinitializes
the counter for each table for the first INSERT to the table, as
described earlier.

这意味着每当我重新启动服务器时,我的auto_increment值都会设置为尽可能小的值.

我有一个名为ticket的表,另一个名为ticket_backup.它们都有一个共享的列id.票证表内的记录可供客户索取.当他们声明票证时,我在ticket_backup中插入记录,然后从票证表中删除它们.截至今天,我已经声明了56000张门票(在ticket_backup内)和0张门票.如果我现在重新启动服务器并且不执行ALTER TABLE,我提供的第一张票将具有id 1,这是ticket_backup已经占用的ID,因此如果我不修复自动增量,则会导致重复键错误值.我想在单个查询中使用它的原因是能够在服务器启动时轻松执行查询.

解决方法:

试试这个:

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;

标签:sql,mysql,select,auto-increment,alter-table
来源: https://codeday.me/bug/20190725/1528983.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有