Maison > Questions et réponses > le corps du texte
Questions :
1. Lorsque les transactions ne sont pas activées dans innodb et autocommit=1, la mise à jour et la suppression provoquent-elles des verrouillages de table ?
J'ai ouvert deux sessions MySQL dans le terminal et la table t contient un total de 3,5 millions de lignes de données
Exécuté seul :
会话1:update t set status=1 where id>1; 16.*秒
会话2:update t set status=1 where id<3500000; 12.*秒
Exécuté simultanément, d'après ce que j'ai compris :
**在我看来,这两条sql,同时执行,同时操作同一条记录的情况,只有一次**
**在innodb中update和delete都会隐式添加排它锁,那么就是说这两条sql同时执行,只会阻塞很短的时间,毕竟只有同时操作同一条记录的情况下,才会阻塞**
Exécuté simultanément, résultats des tests :
两条sql,间隔执行时间,在半秒左右.
会话1先执行:update t set status=1 where id>1;16.*秒,没有变化
会话2后执行:update t set status=1 where id<3500000; 28.* = 12.*秒+16.*秒
会话2先执行:update t set status=1 where id>1;12.*秒,没有变化
会话1后执行:update t set status=1 where id<3500000; 28.* = 16.*秒+12.*秒
Se pourrait-il que lorsque deux SQL opèrent sur le même enregistrement en même temps, la table soit verrouillée ? Je crois comprendre que cela ne bloquera que pendant une courte période. Après tout, le même enregistrement ne peut être utilisé qu'une seule fois en même temps. C'est comme deux personnes, a comptant de 1 à 10 et b comptant de 10. à 1, qu'ils soient à la même vitesse ou que ce ne soit pas la même vitesse, on ne peut compter le même nombre qu'une fois à la fois
仅有的幸福2017-05-25 15:10:06
Un SQL est une transaction, ce qui ne signifie pas que l'exploitation d'enregistrements 1W signifie que les transactions 1W sql1 verrouillent tous les enregistrements >1, et sql2 attendra que sql1 libère le verrou
.