Обновляете ли вы все строки в таблице?
Если да, вы можете использовать CTAS (создать таблицу как), что является рекомендуемым методом
Предполагается, что ваша таблица выглядит следующим образом
table1
id, col1,col2, value
Вы можете использовать следующий SQL для создания новой таблицы
CREATE TABLE tmp_table AS
SELECT id, col1,col2, 'new_value'
FROM table1;
После проверки данных в tmp_table
DROP TABLE table1;
ALTER TABLE tmp_table RENAME TO table1;
Если вы не обновляете все строки, вы можетеиспользуйте фильтр для создания CTAS и вставьте оставшиеся строки в новую таблицу, дайте мне знать, если вам нужно больше информации, если это так
CREATE TABLE tmp_table AS
SELECT id, col1,col2, 'new_value'
FROM table1
WHERE value = 'old'
INSERT INTO tmp_table SELECT * from table1;
Следующим шагом будет УДАЛИТЬ таблицу tmp ипереименовать table1
Обновление: на основе вашего комментария вы можете сделать следующее, дайте мне знать, если это решит ваш случай.
Этот метод в основном создает новую таблицу для замены существующей таблицы.Я использовал часть вашего кода
CREATE TABLE stage (LIKE target INCLUDING DEFAULTS);
INSERT INTO stage SELECT id, 'new' FROM target WHERE value=`old`;
Над INSERT вставляет строки, которые должны быть обновлены с помощью 'new', после этого не нужно запускать UPDATE.
Вывести неизмененные строки
INSERT INTO stage SELECT id, value FROM target WHERE value!=`old`;
После этого у вас есть таблица target
, которая является вашей первоначальной неповрежденной таблицей * Таблица 1030 *
stage
будет иметь оба набора строк, обновленные строки со значением 'new' и строки, которые вам не нужныизменить
заменить target
на stage
DROP TABLE target;
или оставить его для дальнейшей проверки
ALTER TABLE target RENAME TO target_old;
ALTER TABLE stage RENAME TO target;