До решения MySQL 8.0.2 будет использоваться Пользовательские переменные . Поскольку в вашем случае порядок не важен, мы можем определить значение последовательного номера строки напрямую (не беспокоясь о порядке). Он будет начинаться с значения «последний хороший идентификатор» + 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 |
Посмотреть на скрипку БД