lors de l'utilisation stratégie de verrouillage optimiste, il peut résoudre le problème de la concurrence comme ci-dessous:Optimistic-Locking est-il absolument sûr?
| the first transaction started | | | | select a row | | | the second transaction started | update the row with version checking | | | select the same row | commit txn | | | update the row with version checking | | | | rolls back because version is dirty
Mais si dans les cas extrêmement rares si la mise à jour dans la deuxième transaction est postérieure à la udpate dans la première transaction, mais avant la la transaction s'engage?
| the first transaction started | | | the second transaction started | select a row | | | select the same row | update the row with version checking | | | update the row with version checking | commit txn | | | rolls back because version is dirty // will it? | | | |
J'ai fait une expérience que la mise à jour dans la deuxième transaction ne pouvait pas lire la version « sale » parce que la première transaction n'a pas été commis encore. La deuxième transaction échouera-t-elle dans ce cas?
@Adam Arold Merci de m'avoir dit cet aphorisme. Je google parce que je ne suis pas un anglophone natif :) Mais la stratégie optimiste-verrouillage fonctionnera-t-elle dans le cas que j'ai mentionné? – Hippoom
Si c'est vraiment optimiste, comment se fait-il que vous utilisiez la fonction de transaction? La mise à jour échouera d'elle-même sans avoir besoin de revenir en arrière. – tia
@tia Peut-être dans l'exemple, c'est ok avec ou sans transactions.Mais parfois j'ai besoin d'annuler d'autres changements (par exemple peut-être des insertions à une sous-table) à la base de données – Hippoom