通常、データベース トランザクションが送信されないにより、更新または削除が停止します。
更新または削除を実行した後、忘れずにトランザクションをコミットしてください;
データベース クライアントを見つけて、次の実行を実行してください。コミット操作。
それでも動作しない場合。データベースがデータ操作の実行に失敗するか、トランザクションがコミットされない場合、実行する必要がある SQL ステートメントがロックされます。
次のコマンドを使用してデータベースの自動送信ステータスを確認します
show variables like 'autocommit';
SQL を使用してデータベースの自動送信をオフに設定します
-- on为开启,off为关闭 set autocommit=off; -- 或者1为开启,0为关闭 set autocommit=0;
Table データは次のとおりです:
2 つのウィンドウを開いてそれぞれ更新操作を実行します
update car set color ='银色' where id = 1; update car set color ='红色' where id = 1;
実行中のトランザクションをクエリします:
SELECT * FROM information_schema.INNODB_TRX;
図のトランザクションのスレッド ID (trx_mysql_thread_id) によれば、対応する mysql スレッドがわかります。1 つは 1084 (更新はロックを待機しています)もう 1 つは 1089 (トランザクションをコミットせずに更新が実行されます)
mysql コマンドを使用してスレッドを強制終了できます: kill thread id
kill 1089;
ロックを保持しているスレッドが期間中に強制終了されなかった場合、2 番目の更新ステートメントは待機ロック タイムアウトを要求します。
#関連コマンド:
-- 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; -- 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; -- 查询mysql数据库中存在的进程 select * from information_schema.`PROCESSLIST`(show processlist;)Extension
Oracle 動作モード:
ロックされたレコードのクエリSELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;ロックされたレコードの削除
ALTER system KILL session 'SID,serial#';
以上がUpdate実行時にMySQLデータベースが停止する問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。