Après les tests, j'ai découvert que les situations suivantes entraîneraient le verrouillage de la table
1.j'aime
2.mettre à jour, supprimer les opérations inconditionnelles
3.mettre à jour, supprimer les opérations conditionnelles mais pas les opérations de clé primaire
Non peu importe que la sélection soit conditionnelle ou inconditionnelle, que la condition soit une clé primaire ou un index, la table ne sera pas verrouillée. Est-ce correct ? Y a-t-il un problème avec mon test ?
select peut spécifier différents niveaux de verrous tels que des verrous partagés, des verrous exclusifs, etc., tels que
select ... FOR UPDATE
.Quant à savoir pourquoi les verrous sont nécessaires, voici un exemple simple. Par exemple, si vous avez un document qui hérite du document précédent, vous pouvez choisir d'ajouter un verrou en lecture et de verrouiller le document précédent pour empêcher les autres de le modifier. le document précédent avant de le soumettre. Le document a été modifié, ce qui a entraîné une incohérence des données.
Tant que la condition ne contient pas la clé primaire, ou contient la clé primaire mais n'est pas un signe égal ou IN, la table entière sera verrouillée, ce qui inclut les trois situations de la question.
Qu'il s'agisse de verrouiller la table entière ou de verrouiller quelques lignes, sélectionnez l'ajout de verrous en lecture, puis mettez à jour et supprimez l'ajout de verrous en écriture. Quant à ce que sont les verrous en lecture et en écriture, vous pouvez les rechercher sur Google. Pour les détails, vous pouvez également consulter Transaction Isolation Level, que je n'aborderai pas ici.