2017-01-12 5 views
1

Si je lance dix requêtes de mise à jour comme celui-ci, au même moment:Est-ce que MySQL met à jour la même ligne une à la fois?

update table set x = x - 1 where x >= 1 

Est-ce que MySQL, en mode répétitif lecture, garantie que toutes ces requêtes de mise à jour sont exécutées une à la fois, par opposition aux parallèle (tous en même temps)? P.S: Est-ce que la clause where a un impact sur le fait qu'elle est exécutée dans un style parallèle ou séquentiel?

+0

En mode lecture répétée vous dire une traduction réglée sur REPEATABLE-LIRE .. voir http: // dev. mysql.com/doc/refman/5.7/fr/set-transaction.html ??? –

+0

Aucune instruction WHERE ne filtre uniquement les enregistrements qui doivent être mis à jour. N'a pas d'impact si la requête est exécutée en parallèle ou non –

+0

Quel verrouillage est utilisé en lecture ne devrait avoir aucun impact sur une requête UPDATE. La lecture n'est pas la même chose que la mise à jour ou l'insertion. Cela peut affecter la façon dont les autres requêtes sont en cours de lecture, mais si toutes vos requêtes sont mises à jour, cela n'aura aucun impact sur les résultats. – Hogan

Répondre

1

Il sera séquentiel, table/enregistrements seront verrouillés jusqu'à ce qu'une mise à jour donnée est complète - S'il vous plaît lire ci-dessous

Pour les moteurs de stockage tels que MyISAM qui exécutent effectivement des verrous de niveau table lors de l'exécution DML ou DDL déclarations, une telle déclaration dans les anciennes versions de MySQL (5.6.5 et antérieures) qui affectait une table partitionnée imposait un verrou sur la table dans son ensemble; à savoir, toutes les partitions ont été fermé à clé jusqu'au déclaration a été terminé

Plus de détails ici - Partition and locking in mysql

+0

S'il vous plaît marquer comme répondu s'il répond à votre requête –