Heim > Datenbank > MySQL-Tutorial > 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
Freigeben: 2023-05-26 19:07:05
nach vorne
2873 Leute haben es durchsucht

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';
Nach dem Login kopieren

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

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

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;
Nach dem Login kopieren

Fragen Sie die ausgeführte Transaktion ab:

SELECT * FROM information_schema.INNODB_TRX;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;)
Nach dem Login kopieren

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;
Nach dem Login kopieren

Sperrdatensätze löschen

ALTER system KILL session 'SID,serial#';
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage