MySQLバージョン5.5.28InnoDBプロセスを強制終了すると、クエリのROLLBACKが発生しますか?
私は誤ってWHERE句のないUPDATE
クエリを実行しました。
その後、kill 202085
を使用してMySQLでプロセスを強制終了しました。
自動ロールバックが発生しましたか?または、部分的に実行されたクエリについて心配する必要はありますか?
EDIT:私のクエリは、SHOW PROCESSLIST
に従って「送信データ」でした。
EDIT:ここにWHERE
句のないクエリがあります。私はどんな関係が指定されていませんでしたので、任意のWHERE
句なし
UPDATE products t1,
`raw_table` t2
SET t1.`model` = t2.`model`
, t1.`sku` = CONCAT('ABC-',t2.`model`)
は、それは、UPDATE
はどうなるのかに関して、謎です。
WHERE
句を追加した後、瞬時にクエリが実行され、予想通りに約250行更新されました。
WHERE t1.`model` = t2.`old_model`
AND t1.`vendor_id` = 53
データベースが更新されたかどうかを確認しようとしましたか?更新前に新しい値のインスタンス数がデータベースに存在するはずだった場合は、から 'select COUNT(*) 'のようなものを実行できます。 =' my_value ';'。あなたが持っていなければならない価値よりも多くのインスタンスがある場合は、おそらくあなたの変更がロールバックされなかったと推測できます。 –
クラッシュ時には、再起動時にロールバックが行われます。 https://dev.mysql.com/doc/refman/5.7/en/innodb-recovery.htmlを参照してください。ロールバックには、あなたのacutalクエリーの4倍の時間がかかります。 mysqldを強制終了する前にトランザクションがコミットされていれば、ロールバックは実行されません。 – user3606329
Pro-tip:プロダクションデータを扱うときは、クエリをダブルチェックまたはトリプルチェックするまでは、 ';'をタイプしないでください。また、適切なバックアップ戦略がない場合は、今すぐにバックアップ戦略を実装してください。 – tadman