est-il une différence entre une instruction select à l'intérieur d'une transaction et un qui est en dehors d'elle

est-ce que le niveau D'isolement par défaut de lecture COMMITTED rend l'acte select différent à l'intérieur d'une transaction de celui qui n'est pas dans une transaction?

j'utilise MSSQL.

34
demandé sur Trott 2009-12-29 23:11:58

4 réponses

oui, celui à l'intérieur de la transaction peut voir les modifications apportées par d'autres précédents Insert/Update/delete mouvement, un état sélectionné à l'extérieur du mouvement ne peut pas....

si tout ce que vous demandez est ce que le niveau D'isolement fait, alors comprendre-que toutes les déclarations Select (hey, toutes les déclarations de toutes sortes), - dans une transaction. La seule différence entre celui qui est explicitement une transaction et un qui se tient seul est que celui qui se tient seul commence sa transaction immédiatement avant qu'elle ne l'exécute, et s'engage ou recule immédiatement après qu'elle l'exécute,

alors que celui qui est explicitement dans un mouvement peut, (parce qu'il a une instruction de mouvement de début) peut avoir d'autres instructions (inserts/updates/deletes, quel qu'il soit) se produire dans cette même transaction, soit avant ou après cette instruction Select.

Donc quel que soit le niveau d'isolement, les deux sélections (à l'intérieur ou à l'extérieur d'une transaction explicite) seront néanmoins dans une transaction qui opère à ce niveau d'isolement.

Ajout: Ce qui suit est pour SQL Server, mais toutes les bases de données doivent fonctionner de la même manière. Dans SQL Server le processeur de requête est toujours dans l'un des 3 Modes de Transaction,Validation,Implicite, ou Explicite.

Validation est le mode de gestion des transactions par défaut du moteur de base de données SQL Server. .. Chaque instruction Transact-SQL est engagée ou retranchée lorsqu'elle est terminée. ... Si une instruction se termine avec succès, il est commis; s'il rencontre une erreur, elle est annulée. C'est la valeur par défaut, et c'est la réponse à la question de @Alex dans les commentaires.

Transaction Implicite mode,"... la base de données SQL Server Moteur automatiquement démarre une nouvelle transaction après la transaction est validée ou annulée. Vous ne faites rien pour délimiter le début d'une transaction; vous seulement de valider ou d'annuler l'opération. Mode de transaction implicite génère une chaîne continue de transactions. ..."Veuillez noter que l'extrait en italique s'applique à chaque opération, qu'il s'agisse d'une opération à relevé unique ou d'une opération à relevé multiple.

Le moteur est placé dans Transaction Explicite mode lorsque vous initiez explicitement une transaction avec BEGIN TRANSACTION Déclaration. Ensuite, chaque instruction est exécutée dans cette transaction jusqu'à ce que vous terminiez explicitement la transaction (avec COMMIT ou