web-dev-qa-db-fra.com

En InnoDB, une transaction implique-t-elle tout verrouillage implicite d'une table?

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:

  • L'exécution actuelle atteint au point 4.
  • Une personne insère des données (note, l'exécution actuelle est au point 4) du tableau A qui aurait renvoyé un certain résultat au n ° 2.
  • Maintenant, l'exécution actuelle sera exécutée n ° 5. Il supprimera un enregistrement qui ne devrait pas être supprimé.

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?

5
svirk

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.

  1. A: ensemble autocommit = 0;
  2. A: mise à jour de l'état de l'ensemble de la mise à jour = 0 où colonnes_a in (234,333) et is_del = 0;
  3. B: SET Autocommit = 0;
  4. B: mise à jour SOMMORE STONABLE STATUS = 0 où colonnes_a in (222.444) et is_del = 0;
  5. A: commettre;
  6. B: commit;

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.

0
Arvin Rong