Il existe deux situations dans lesquelles la mise à jour dans MySQL verrouille la table : 1. Lorsque la mise à jour n'a pas d'index, la transaction précédente dans l'instruction est soumise via la validation, et la commande s'exécutera normalement et se terminera, puis la mise à jour se verrouillera. la table ; 2. Lorsque la mise à jour ajoute un index, la commande ne restera pas bloquée et ne verrouillera pas la table, mais elle mettra à jour la même ligne et provoquera un verrouillage de ligne.
L'environnement d'exploitation de ce tutoriel : système windows10, version mysql8.0.22, ordinateur Dell G3.
S'il n'y a pas d'index, la mise à jour verrouillera la table. Si un index est ajouté, la ligne sera verrouillée
Lorsque la transaction précédente est soumise via la validation, la commande le sera. fonctionner normalement et se terminer. L'explication est La montre est verrouillée.
Deux situations :
1. Avec index
2. Sans index
Introduction aux prérequis :
Méthode : Utiliser la ligne de commande pour simuler
1.mysq est activé par défaut Valider automatiquement transactions, vous devez donc d'abord vérifier si la validation automatique des transactions est activée dans votre base de données actuelle.
Commande : sélectionnez @@autocommit ;
Le résultat est le suivant :
S'il vaut 1, exécutez la commande : set autocommit = 0 ; défini pour ne pas activer la soumission automatique
2. le format de la table de base de données est le suivant
tb_user | CREATE TABLE `tb_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `phone` varchar(11) DEFAULT NULL, `operator` varchar(32) DEFAULT NULL, `gmt_create` datetime DEFAULT NULL, `gmt_modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
Évidemment, je n'ai ajouté aucun index à l'exception de la clé primaire
Exemple réel :
1. Aucun index
Exécutez la commande : commencez la transaction, puis exécutez la commande. : update tb_user set phone=11where name="c1"; Pour modifier, ne validez pas la transaction au préalable.
Ouvrez une autre fenêtre et exécutez la commande directement : update tb_user set phone=22 which name="c2" ; vous constaterez que la commande est bloquée, mais lorsque la transaction précédente est soumise via commit, la commande s'exécutera normalement et se terminera. , indiquant que la montre est verrouillée.
2. Ajoutez un index au champ du nom
create index index_name on tb_user(name);
Continuez ensuite l'opération en 1, qui consiste à ouvrir une transaction et à exécuter la mise à jour tb_user set phone=11 où name="c1";
puis une autre Exécutez la mise à jour tb_user set phone=22 où name="c2"; et constatez que la commande ne restera pas bloquée, indiquant qu'il n'y a pas de table de verrouillageMais si une autre mise à jour tb_user set phone=22 où name=" c1"; met à jour la même ligne, cela signifie qu'il n'y a pas de table de verrouillage C'est un verrouillage de ligne3. Résumé
S'il n'y a pas d'index, la mise à jour verrouillera la table. Si un index est ajouté, la ligne sera verrouillée
Apprentissage recommandé : tutoriel vidéo mysql
🎜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!