2017-01-31 16 views
1

MySQL версия 5.5.28Убивает ли процесс InnoDB результат ROLLBACK запроса?

Я случайно запросил UPDATE запрос без предложения WHERE.

Затем я убил процесс в MySQL, используя kill 202085.

Это привело к автоматическому откату? Или мне нужно беспокоиться о частично выполненном запросе?

EDIT: Мой запрос был «ОТПРАВКА ДАННЫХ» согласно SHOW PROCESSLIST.

EDIT: Вот запрос без предложения WHERE.

UPDATE products t1, 
`raw_table` t2 
SET t1.`model` = t2.`model` 
, t1.`sku` = CONCAT('ABC-',t2.`model`) 

Без WHERE статьи, это тайна, как к тому, что UPDATE будет делать, так как я не уточнил, никакого отношения.

После добавления предложения WHERE мой запрос выполняется мгновенно и обновлен примерно на 250 строк, как ожидалось.

WHERE t1.`model` = t2.`old_model` 
AND t1.`vendor_id` = 53 
+0

Вы пытались проверить базу данных, чтобы узнать, обновлены ли строки? Если вы знаете, сколько экземпляров нового значения должно было быть в базе данных до обновления, вы можете запустить что-то вроде 'select COUNT (*) с , где = 'my_value';'. Если у вас больше экземпляров такого значения, чем у вас должно быть, вы можете предположить, что ваши изменения не откатны. –

+0

При сбое при повторном запуске будет выполнен откат. См. Https://dev.mysql.com/doc/refman/5.7/en/innodb-recovery.html. Откат назад займет до 4 раз дольше, чем ваш acutal-запрос. Если транзакция была совершена до того, как вы убили mysqld, она не будет выполнять откат. – user3606329

+0

Pro-tip: при работе над производственными данными не вводите ';', пока вы не удвоите или не проверите тройной запрос. Также, если у вас нет хорошей стратегии резервного копирования, пришло время ее реализовать. – tadman

ответ

2

Да, он откатывается назад. Но это зависит от стадии запроса. Он не откатится, если он совершил изменения. Если вам удалось убить запрос до операции, он будет откатываться.

+0

Мне любопытно, вы считаете, что он использует транзакции или это имеет значение? –

+0

Обычно команды DML запускаются в автоматическом режиме. Они совершаются, как только операция завершается. Если он отключает автообновление, тогда его легко откатить вручную. –

+0

@bio_sprite Вот как я испытал работу MVC InnoDB. Если команда не ударила по фазе фиксации, она откат. Тем не менее, может потребоваться значительное время для размотки транзакции. – tadman

 Смежные вопросы

  • Нет связанных вопросов^_^