MySQL重复的'ID'= 0并且不能将AUTO_INCREMENT放在

时间:2018-11-14 10:00:45

标签: mysql sql-update

我正忙于将旧网站转移到新主机。 现在它几乎完成了,但是数据库出了点问题,某些主键没有变为AUTO_INCREMENT。所以现在我有很多重复的ID 0。

SQL中是否有一种方法可以更新所有id = 0的ID并加上这些ID? 填充的最后一个ID是“ 2108”,因此下一个ID必须是“ 2109”,然后是++。

SELECT * FROM `x9i8Z_yoast_seo_links` WHERE `id` = 0

请帮助我:)

1 个答案:

答案 0 :(得分:1)

MySQL 8.0.2之前的解决方案将使用User-defined variables。由于排序对您而言并不重要,因此我们可以直接确定顺序的行号值(而不必担心顺序)。它将从“最后一个有效ID”值+ 1开始。然后,我们将更新行的id值,其中id的值为0。

UPDATE `x9i8Z_yoast_seo_links` AS t
CROSS JOIN (SELECT @rn := 2108) AS user_init -- 2108 is your "last good id" 
SET t.id = (@rn := @rn + 1)
WHERE t.id = 0

演示-架构(MySQL v5.7)

create table test
(id int);

insert into test 
values (1),(2),(3),(4),(0),(0),(0),(0);

查询1:更新操作之前的数据

select * from test;

| id  |
| --- |
| 1   |
| 2   |
| 3   |
| 4   |
| 0   |
| 0   |
| 0   |
| 0   |

查询#2:更新操作已完成

update test AS t
cross join (select @rn := 4) AS user_init 
set t.id = (@rn := @rn + 1)
where t.id = 0;

查询#3:更新操作完成后的数据

select * from test;

| id  |
| --- |
| 1   |
| 2   |
| 3   |
| 4   |
| 5   |
| 6   |
| 7   |
| 8   |

View on DB Fiddle