Le niveau d'isolement est répétable_read.
La logique est aussi sous:
Transaction begins
Read data from Table A
If (Table A has Any Data) End Transaction and exit
If Table A has No Data, Proceed further
Delete a record in Table B
Transaction ends
Maintenant, ma question concerne le scénario suivant:
Existe-t-il un verrouillage implicite en transaction ou dois-je verrouiller la table une table explicitement afin que personne ne puisse insérer des données dans le tableau A avant de commettre des changements?
J'ai fait un test sur le verrouillage. J'ai démarré deux connexions appelées A et B pour exécuter des commandes. La liste de flux de fonctionnement ci-dessous.
scénarios A: Si colonnes_a est défini comme clé primaire de l'étape 4 déjà exécutée et terminée immédiatement.
scénarios B: Si colonnes_a n'est pas la clé primaire, mais nous avions ajouté un index sur colonne_a de la même étape, étape 4 exécuté et terminé immédiatement.
scénarios C: Si colonnes_a est définie comme une clé primaire de la SALTABLE, étape 4 exécutée et terminée en un rien de temps.
scénarios D: Si colonnes_a n'est pas la clé principale, l'étape 4 attendrait la serrure jusqu'à ce que l'étape 5 est exécutée.
Je me demande si le "verrou" est le verrou de la table qui tente d'acquérir à l'étape 4 dans les scénarios d.