sql >> Databáze >  >> RDS >> Sqlserver

Jaký má smysl přiložit k transakci vybrané výpisy?

Máte pravdu:na standardní úrovni izolace , read committed , nemusíte vybrané výpisy zabalovat do transakcí. Vybrané výpisy budou chráněny před nečistými čteními, ať už je zabalíte do transakce nebo ne.

connection 1:                          connection 2:

                                       begin transaction
                                       update user set name = 'Bill' where id = 1
select name from users where id = 1
                                       rollback transaction

Příkaz select nebude číst vrácenou aktualizaci:nezáleží na tom, že nejsou zabaleny do transakce.

Pokud potřebujete opakovatelné čtení , pak nepomůže zabalení výběrů do výchozí transakce:

connection 1:                          connection 2:

begin transaction
select name from users where id = 1
                                       update user set name = 'Bill' where id = 1
select name from users where id = 1
commit transaction

begin a commit zde nepomohou příkazy:druhý select může přečíst starý název, nebo může přečtěte si nový název.

Pokud však používáte vyšší úroveň izolace, například serializable nebo repeatable read , bude skupina chráněna před neopakovatelným čtením:

connection 1:                          connection 2:

set transaction isolation level
    repeatable read
begin transaction
select name from users where id = 1
                                       update user set name = 'Bill' where id = 1
select name from users where id = 1              |
commit transaction                               |
                                                 |--> executed here

V tomto scénáři update se zablokuje, dokud nebude dokončena první transakce.

Vyšší úrovně izolace se používají zřídka, protože snižují počet lidí, kteří mohou současně pracovat v databázi. Na nejvyšší úrovni, serializable , dotaz na vytváření přehledů zastaví jakoukoli aktualizační aktivitu.



  1. Seřaďte tabulku MySQL podle dvou sloupců

  2. vložit při aktualizaci duplicitního klíče

  3. Chybí artefakt com.microsoft.sqlserver:sqljdbc4:jar:4.0

  4. Rozdíl mezi databází, tabulkou, řazením sloupců