我正忙于将旧网站转移到新主机。 现在它几乎完成了,但是数据库出了点问题,某些主键没有变为AUTO_INCREMENT。所以现在我有很多重复的ID 0。
SQL中是否有一种方法可以更新所有id = 0的ID并加上这些ID? 填充的最后一个ID是“ 2108”,因此下一个ID必须是“ 2109”,然后是++。
SELECT * FROM `x9i8Z_yoast_seo_links` WHERE `id` = 0
请帮助我:)
答案 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 |