ما هو نطاق العزلة في المعاملات المتداخلة في SQL Server؟

StackOverflow https://stackoverflow.com/questions/223436

  •  03-07-2019
  •  | 
  •  

سؤال

والنظر في SQL التالية:

BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

INSERT Bands
    (  Name  )
SELECT 'Depeche Mode'
UNION
SELECT 'Arcade Fire'

    -- I've indented the inner transaction to make it clearer.

    BEGIN TRAN
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    SELECT *
      FROM Bands

    COMMIT

-- What is the isolation level right here?

UPDATE Bands
   SET Name = 'Modest Mouse'
 WHERE Name = 'Oddest House'

COMMIT

في المبلغ، ونحن نبدأ صفقة وتعيين مستوى عزلتها إلى READ COMMITTED. نحن بعد ذلك القيام ببعض SQL عشوائي وتبدأ أخرى، والمعاملات المتداخلة. في هذه الصفقة نغير مستوى العزل إلى READ UNCOMMITTED. ثم أننا ارتكاب تلك المعاملة والعودة إلى أخرى.

والآن، تخميني هو أنه بعد ارتكاب الداخلية، مستوى العزل يعود إلى READ COMMITTED. فهل هذا صحيح؟

نصائح أخرى

وأنت [بوب بروبست] صحيحة. ومن المثير للاهتمام، وفقا لوثائق الذي المرتبط:

<اقتباس فقرة>   

إذا كنت لإصدار SET TRANSACTION عزل LEVEL في إجراء مخزن أو المشغل، عندما السيطرة على عوائد الكائن تتم إعادة تعيين مستوى العزل إلى مستوى سارية المفعول عندما تم استدعاء الكائن. على سبيل المثال، إذا قمت بتعيين READ للتكرار في دفعة ودفعة ثم باستدعاء إجراء مخزن الذي يحدد مستوى العزل إلى SERIALIZABLE، وتحديد مستوى العزل يعود إلى تكرار قراءة عند السيطرة على عوائد الإجراء المخزن إلى دفعة واحدة.

وهكذا، وخلاصة القول هنا هو أن LEVEL SET TRANSACTION عزل و<م> إجراء تقارب ، وليس <م> تقارب الصفقة (كما كنت أظن).

ورائع!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top