我的表格是这样的:
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/