Heim  >  Artikel  >  Datenbank  >  So lösen Sie das Problem, dass die MySQL-Datenbank beim Ausführen von Update hängen bleibt

So lösen Sie das Problem, dass die MySQL-Datenbank beim Ausführen von Update hängen bleibt

WBOY
WBOYnach vorne
2023-05-26 19:07:052771Durchsuche

Problemanalyse

Normalerweise wird die Datenbanktransaktion nicht übermittelt, was dazu führt, dass Aktualisierungen oder Löschvorgänge hängen bleiben.

Lösung

  1. Denken Sie nach dem Durchführen von Aktualisierungen oder Löschungen daran, die Transaktion zum Festschreiben einzureichen.

  2. Suchen Sie den Datenbank-Client und führen Sie den Festschreibungsvorgang durch.

Wenn es immer noch nicht funktioniert. Wenn die Datenbank einen Datenvorgang nicht ausführen kann oder die Transaktion nicht festgeschrieben ist, sperrt sie die auszuführende SQL-Anweisung.

Prozessreproduktion und -lösung

Sehen Sie sich den automatischen Übermittlungsstatus der Datenbank mit dem folgenden Befehl an

show variables like 'autocommit';

Stellen Sie die automatische Übermittlung der Datenbank über SQL aus

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

Die Daten in der Tabelle lauten wie folgt:

So lösen Sie das Problem, dass die MySQL-Datenbank beim Ausführen von Update hängen bleibt

Öffnen zwei Fenster zum Ausführen der Aktualisierung bzw. Operation

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

Fragen Sie die ausgeführte Transaktion ab:

SELECT * FROM information_schema.INNODB_TRX;

So lösen Sie das Problem, dass die MySQL-Datenbank beim Ausführen von Update hängen bleibt

Anhand der Thread-ID (trx_mysql_thread_id) der Transaktion im Bild können wir den entsprechenden MySQL-Thread sehen: einer ist 1084 ( update wartet auf die Sperre) und der andere ist 1089 (Update-Transaktionen werden ohne Commit ausgeführt)

Sie können den Thread mit dem MySQL-Befehl beenden: kill thread id

kill 1089;

Wenn der Thread die Sperre hält Während des Zeitraums nicht beendet: Die zweite Update-Anweisung fordert Sie auf, auf das Zeitlimit der Sperre zu warten.

So lösen Sie das Problem, dass die MySQL-Datenbank beim Ausführen von Update hängen bleibt

Verwandte Befehle:

-- 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

-- 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-- 查询mysql数据库中存在的进程
select * from information_schema.`PROCESSLIST`(show processlist;)

Erweiterte

Oracle-Operationsmethode:

Sperrdatensätze abfragen

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;

Sperrdatensätze löschen

ALTER system KILL session 'SID,serial#';

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass die MySQL-Datenbank beim Ausführen von Update hängen bleibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen