Dans Oracle, "pour mise à jour" est un verrouillage au niveau de la ligne, qui est utilisé pour imposer un verrouillage au niveau de la ligne sur une ligne. L'utilisateur verrouillé peut interroger et mettre à jour la ligne de données, mais les autres utilisateurs ne peuvent pas interroger et mettre à jour la ligne verrouillée. ligne, la syntaxe est "SELECT * FROM nom de la table WHERE nom de la colonne FOR UPDATE;".
L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.
1. Définition de for update
for update est un verrou au niveau de la ligne, également appelé verrou exclusif une fois que l'utilisateur applique un verrou au niveau de la ligne à une ligne. , alors cet utilisateur peut interroger et mettre à jour les lignes de données verrouillées, tandis que les autres utilisateurs peuvent uniquement interroger mais ne peuvent pas mettre à jour les lignes de données verrouillées. Si d'autres utilisateurs souhaitent mettre à jour les lignes de données de la table, ils doivent également appliquer des verrous au niveau des lignes à la table. Même si plusieurs utilisateurs utilisent des mises à jour partagées sur une table, deux transactions ne sont pas autorisées à mettre à jour une table en même temps. Lorsque la table est réellement mise à jour, elle est verrouillée exclusivement jusqu'à ce que la transaction soit validée ou restaurée. Les verrous de rangée sont toujours des verrous exclusifs.
Le verrou de mise à jour partagée sera libéré uniquement lorsque l'une des conditions suivantes se produit :
1 Exécutez l'instruction de validation (COMMIT)
2 Quittez la base de données (LOG OFF)
3.
2. Concept et utilisationNormalement, l'instruction select ne verrouillera pas les données et empêchera d'autres opérations DML et DDL d'être affectées. Dans le même temps, grâce à la prise en charge du mécanisme de lecture cohérente multi-versions, l'instruction select ne sera pas bloquée par d'autres types d'instructions.
L'instruction select … for update est une instruction de verrouillage manuel que nous utilisons souvent. Lorsque vous exécutez select ... pour la mise à jour dans la base de données, vous constaterez que la table ou certaines données de ligne de la base de données seront verrouillées. Dans MySQL, si la condition de requête contient une clé primaire, les données de ligne seront verrouillées. non, la table sera verrouillée.
Étant donné qu'InnoDB utilise par défaut le verrouillage au niveau de la ligne, MySQL exécutera le verrouillage de ligne (verrouillera uniquement les données sélectionnées) uniquement si la clé primaire est "clairement" spécifiée, sinon, MySQL exécutera le verrouillage de table (verrouillera l'intégralité du formulaire de données) verrouillé. .
Par exemple : supposons qu'il existe une table user, qui comporte deux colonnes : id et name, et id est la clé primaire.
Exemple 1 : (Spécifiez explicitement la clé primaire, et les données existent, verrouillage de ligne)
SELECT * FROM user WHERE id=3 FOR UPDATE; SELECT * FROM user WHERE id=3 and name='Tom' FOR UPDATE;
Exemple 2 : (Spécifiez explicitement la clé primaire, mais les données n'existent pas, pas de verrouillage)
SELECT * FROM user WHERE id=0 FOR UPDATE;
Exemple 3 : (La clé primaire n'est pas claire, verrouillage de la table)
SELECT * FROM user WHERE id<>3 FOR UPDATE; SELECT * FROM user WHERE id LIKE '%3%' FOR UPDATE;
Exemple 4 : (Pas de clé primaire, verrouillage de la table)
SELECT * FROM user WHERE name='Tom' FOR UPDATE;
Remarque :
1. FOR UPDATE ne s'applique qu'à InnoDB et doit être dans le module de traitement des transactions ( BEGIN/COMMIT) pour prendre effet.
2. Pour tester la situation de verrouillage, vous pouvez utiliser le mode commande de MySQL pour ouvrir deux fenêtres à des fins de test.
3. Myisam ne prend en charge que les verrous au niveau de la table, tandis qu'InnerDB prend en charge les verrous au niveau de la ligne. Les données avec des verrous ajoutés (verrous au niveau de la ligne/verrouillage au niveau de la table) ne peuvent pas être verrouillées par d'autres transactions ou modifiées par d'autres transactions. Lorsqu'il s'agit d'un verrouillage au niveau de la table, la table sera verrouillée, que l'enregistrement soit interrogé ou non.
3. Quand devez-vous utiliser la mise à jour ?Avec l'aide de l'instruction for update, nous pouvons implémenter manuellement des opérations de verrouillage et de protection des données au niveau de l'application. Lorsque vous avez besoin de données exclusives au niveau de l'entreprise, vous pouvez envisager de les utiliser pour la mise à jour.
Dans des scénarios tels que la réservation d'un billet de train, le billet est affiché à l'écran, mais lorsque le billet est effectivement émis, il est nécessaire de reconfirmer que les données n'ont pas été modifiées par d'autres clients. Par conséquent, au cours de ce processus de confirmation, vous pouvez utiliser la mise à jour.
4. pour mettre à jour le verrouillage pessimisteVerrouillage pessimiste : supposez toujours le pire des cas et pensez que d'autres le modifieront à chaque fois que vous obtiendrez les données, vous le verrouillerez donc à chaque fois que vous obtiendrez les données, de sorte que autres Si vous souhaitez obtenir ces données, elles seront bloquées jusqu'à ce qu'elles soient déverrouillées. De nombreux mécanismes de verrouillage de ce type sont utilisés dans les bases de données relationnelles traditionnelles, tels que les verrous de ligne, les verrous de table, les verrous de lecture, les verrous d'écriture, etc., qui sont tous verrouillés avant les opérations. Tout comme pour la mise à jour, l'implémentation du mot-clé synchronisé en Java est également un verrou pessimiste.
Verrouillage optimiste : comme son nom l'indique, il est très optimiste. Chaque fois que vous allez récupérer les données, vous pensez que les autres ne les modifieront pas, donc vous ne les verrouillerez pas. Cependant, lors de la mise à jour, vous jugerez si les autres. avoir mis à jour les données pendant cette période. Des mécanismes tels que les numéros de version peuvent être utilisés. Le verrouillage optimiste convient aux types d'applications à lectures multiples, ce qui peut améliorer le débit. Le mécanisme write_condition fourni par la base de données est en fait un verrou optimiste.
Tutoriel recommandé : "
Tutoriel vidéo OracleCe 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!