J'ai deux requêtes simples une lecture et une mise à jour d'une table. Comment puis-je verrouiller la lecture pour la requête de sélection pendant que la mise à jour est en cours d'exécution. En ce moment, dans MySQL InnoDB, j'ai remarqué que l'écriture/mise à jour est par défaut verrouillée mais la lecture/sélection récupère les anciennes données avant la transaction.Bloc MySQL lit pendant la mise à jour
J'ai essayé d'utiliser une transaction dans la requête de mise à jour, puis SELECT ... FOR UPDATE
- en dehors de la transaction - mais cela n'a pas l'air de faire l'affaire. Aussi, je me demandais, à des fins de test, comment ralentir la requête UPDATE. Je suis tombé sur SLEEP (X), mais je ne sais pas comment l'implémenter dans la requête de mise à jour.
Comment puis-je faire en sorte que chaque requête attende en lecture/écriture jusqu'à ce qu'une écriture soit terminée.
En effet, je l'ai testé et cela fonctionne, si cela ne vous dérange pas, pourriez-vous m'expliquer rapidement une ou deux choses. Tout d'abord pourquoi 'SELECT ... FOR UPDATE' n'a pas fonctionné? Deuxièmement, j'ai essayé sans 'SET tx_isolation = 'READ-COMMITTED';' et cela a toujours fonctionné. Enfin, un commit le rend incapable d'écrire jusqu'à ce qu'il soit fini (ce n'est pas le cas par défaut). Je sais que certains d'entre eux peuvent être répondus par googling, mais je l'ai fait et je voulais les effacer un peu si cela ne vous dérange pas de passer un peu de votre temps. –
'SELECT ... FOR UPDATE' devrait fonctionner de la même manière, je suppose que vous avez fait les étapes dans un ordre différent. Je ne sais pas. –
Le mode read-committed agira exactement comme repeatable-read si vous utilisez autocommit, car chaque instruction démarre une nouvelle transaction. Mais si vous faites SELECT dans le cadre d'une transaction plus longue, vous voudrez utiliser read-committed. –