MySQL版本5.5.28是否查殺InnoDB進程導致ROLLBACK?
我不小心運行了一個沒有WHERE子句的UPDATE
查詢。
然後我使用kill 202085
殺死了MySQL中的進程。
是否導致自動回滾?或者我需要擔心部分執行的查詢?
編輯:我的查詢是「發送數據」根據SHOW PROCESSLIST
。
編輯:這裏是沒有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
您是否嘗試過檢查數據庫以查看行是否已更新?如果知道在更新之前應該在數據庫中有多少實例的新值,那麼可以運行如下類似的方法:從中選擇COUNT(*),其中 ='my_value';'。如果你有更多的實例,那麼你可以假設你的改變沒有回滾。 –
在發生崩潰時,重新啓動後會回滾。請參閱https://dev.mysql.com/doc/refman/5.7/en/innodb-recovery.html - 回滾將比您的acutal查詢長4倍。如果在你殺死mysqld之前事務已經被提交,它將不會執行回滾。 – user3606329
專業提示:在生產數據上工作時,不要輸入';',直到你有兩次或三次檢查你的查詢。另外,如果你沒有一個好的備份策略,現在是時候實施一個。 – tadman