Habituellement, la transaction de base de données n'est pas soumise, ce qui entraîne le blocage de la mise à jour ou de la suppression.
Après avoir effectué des mises à jour ou des suppressions, n'oubliez pas de soumettre la transaction à valider ;
Trouvez le client de la base de données et effectuez l'opération de validation.
Si ça ne marche toujours pas. Lorsque la base de données ne parvient pas à effectuer une opération sur les données ou que la transaction n'est pas validée, elle verrouille l'instruction SQL qui doit être exécutée.
Affichez l'état de soumission automatique de la base de données via la commande suivante
show variables like 'autocommit';
Désactivez la soumission automatique automatique de la base de données via SQL
-- on为开启,off为关闭 set autocommit=off; -- 或者1为开启,0为关闭 set autocommit=0;
Les données du tableau sont les suivantes :
Ouvrez deux fenêtres pour exécuter la mise à jour séparément Opération
update car set color ='银色' where id = 1; update car set color ='红色' where id = 1;
Interrogez la transaction en cours d'exécution :
SELECT * FROM information_schema.INNODB_TRX;
Selon l'ID de thread (trx_mysql_thread_id) de la transaction dans l'image, nous pouvons voir le thread mysql correspondant : un est 1084 (la mise à jour attend le verrou) et l'autre est 1089 (les transactions de mise à jour sont en cours d'exécution sans validation)
Vous pouvez utiliser la commande mysql pour tuer le thread : kill thread id
kill 1089;
Si le thread tient le verrou n'est pas supprimé pendant la période : la deuxième instruction de mise à jour vous demandera d'attendre l'expiration du délai du verrou.
Commandes associées :
-- 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; -- 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; -- 查询mysql数据库中存在的进程 select * from information_schema.`PROCESSLIST`(show processlist;)
Méthode d'opération Oracle :
Requête des enregistrements de verrouillage
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;
Supprimer les enregistrements de verrouillage
ALTER system KILL session 'SID,serial#';
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!