mysql - 在使用自动增量的 MySQL 中清理表

标签 mysql sql database

我的表格是这样的:

table_id | letters
-------- | -------
     4   |    a
    10   |    b
    24   |    c
    78   |    d
   110   |    e
   234   |    f

table_id 使用选项 AUTO_INCREMENT。 (这些值是因为我的程序中有一个奇怪的错误......不要问 :-) )

我想用以下结果清理它:

table_id | letters
-------- | -------
    1    |    a
    2    |    b
    3    |    c
    4    |    d
    5    |    e
    6    |    f

这可能吗?

有没有办法通过 cronjob 或其他方式自动清理它?


解决方案:

戈登回答的第一个解决方案确实有效。但我需要添加一些代码,因为 auto_increment 不想自动重置。 最终的解决方案是:

SET @rn := 0;

UPDATE t 
SET 
    table_id = (@rn:=@rn + 1)
ORDER BY table_id;

SELECT 
    COUNT(*)
INTO @AutoInc FROM
    t;

SET @s:=CONCAT('ALTER TABLE t AUTO_INCREMENT=', @AutoInc + 1);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

(重置计数器我使用了 this 解决方案)

最佳答案

尝试执行以下操作:

set @rn := 0;

update t
    set table_id = (@rn := @rn + 1)
    order by table_id;

如果这不起作用,您可以使用截断和重新加载技巧:

create table temp_t as
    select t.*
    from t;

truncate table t;

insert into t(letters)
    select letters
    from temp_t
    order by table_id;

关于mysql - 在使用自动增量的 MySQL 中清理表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45399908/

相关文章:

python - 获取之前生成的ID

mysql - SQL复制并保存为JSON格式

iphone - iOS应用场景信用卡信息加密

php - 我可以在 XAMPP 上管理我的数据库,但无法通过其他方式访问它

MYSQL:从表中选择匹配组合和相反组合的所有行

php - $_GET 创建产品页面

mysql - 更新数量以减去 1

python - 两列数据结构 - Python

SQL server 查询 Material list 数量

c# - sql 查询表达式中的语法错误(缺少运算符)