ホームページ  >  記事  >  データベース  >  Update実行時にMySQLデータベースが停止する問題を解決する方法

Update実行時にMySQLデータベースが停止する問題を解決する方法

WBOY
WBOY転載
2023-05-26 19:07:052811ブラウズ

問題分析

通常、データベース トランザクションが送信されないにより、更新または削除が停止します。

解決策

  1. 更新または削除を実行した後、忘れずにトランザクションをコミットしてください;

  2. データベース クライアントを見つけて、次の実行を実行してください。コミット操作。

それでも動作しない場合。データベースがデータ操作の実行に失敗するか、トランザクションがコミットされない場合、実行する必要がある SQL ステートメントがロックされます。

プロセスの再現と解決策

次のコマンドを使用してデータベースの自動送信ステータスを確認します

show variables like 'autocommit';

SQL を使用してデータベースの自動送信をオフに設定します

-- on为开启,off为关闭
set autocommit=off;
-- 或者1为开启,0为关闭
set autocommit=0;

Table データは次のとおりです:

Update実行時にMySQLデータベースが停止する問題を解決する方法

2 つのウィンドウを開いてそれぞれ更新操作を実行します

update car set color ='银色' where id = 1;
update car set color ='红色' where id = 1;

実行中のトランザクションをクエリします:

SELECT * FROM information_schema.INNODB_TRX;

Update実行時にMySQLデータベースが停止する問題を解決する方法

図のトランザクションのスレッド ID (trx_mysql_thread_id) によれば、対応する mysql スレッドがわかります。1 つは 1084 (更新はロックを待機しています)もう 1 つは 1089 (トランザクションをコミットせずに更新が実行されます)

mysql コマンドを使用してスレッドを強制終了できます: kill thread id

kill 1089;

ロックを保持しているスレッドが期間中に強制終了されなかった場合、2 番目の更新ステートメントは待機ロック タイムアウトを要求します。

Update実行時にMySQLデータベースが停止する問題を解決する方法

#関連コマンド:

-- 查看正在锁的事务
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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。