Базы данных SQL-DDL и SQL-DML. Изучение транзакций. Программирование на языке SQL. Консольное приложение (Цикл лабораторных работ). Вариант № 2, страница 8

2          The Lord of the Rings: The Two Towers      2002    179      94000000        3

3          Titanic 1997    194      200000000      4

4          Avatar 2009    162      237000000      5

5          The Terminator 2: Judgment Day      1991    137      102000000      1

6          Catch Me If You Can            2002    141      52000000       

7          Manhattan      1979    96        39000000       

8          Gullivers Travels        2010    85        112000000     

Example 2:

1я сессия, уровень изоляции Read Committed:

SELECT first 1 film.f_id from film, soundtrack

          where soundtrack.author = 9 AND soundtrack.film = film.f_id

          ORDER BY film.year_of_creation DESC ;

Результат:

F_ID

4

2я сессия:

INSERT INTO soundtrack (sound_id,name,author,film)

VALUES (4,'ROSES THEME',9,8);

После подтверждения 2й сессии, результат 1й:

F_ID

8

2) Snapshot.

Этот уровень изоляции позволяет транзакции получить состояние базы данных на момент начала транзакции. Эта транзакция не может увидеть любые изменения, сделанные другими параллельными транзакциями.

Example 1:

1я сессия, уровень изоляции Snapshot:

SELECT film.name, website.url FROM film, website WHERE film.site = website.s_id;

Результат:

NAME                                                                                             URL

The Terminator 2: Judgment Day                                         http://www.kinopoisk.ru

The Lord of the Rings: The Fellowship of the Ring             http://www.lordoftherings.net

The Lord of the Rings: The Two Towers                             http://www.lordoftherings.net

Titanic                                                                                   http://www.titanicmovie.com

Avatar                                                                                   http://www.imdb.com

2я сессия, уровень изоляции Read Committed: 

UPDATE website SET URL = 'http://www.film.com' WHERE S_ID =1;

После подтверждения 2й сессии, результат 1й не изменился.

После подтверждения 1й сессии, результат 1й сессии:

NAME                                                                                              URL

The Terminator 2: Judgment Day                                         http://www.film.com

The Lord of the Rings: The Fellowship of the Ring             http://www.lordoftherings.net

The Lord of the Rings: The Two Towers                             http://www.lordoftherings.net

Titanic                                                                                   http://www.titanicmovie.com

Avatar                                                                                   http://www.imdb.com

Example 2: (две сессии пишут в таблицу)

1я сессия, уровень изоляции Snapshot:

UPDATE website SET URL = 'http://www.kinopoisk.com' WHERE S_ID =1;

2я сессия, уровень изоляции Read Committed или Snapshot:

UPDATE website SET URL = 'http://www.poisk.com' WHERE S_ID =1;

До подтверждения 1й сессии, в результате выполнения 2й сессии выдаётся сообщение:

Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.

lock conflict on no wait transaction.

deadlock.

update conflicts with concurrent update.

concurrent transaction number is 2391.

3) Snapshot table stability.

Этот уровень изоляции имеет те же свойства, что и предыдущий уровень, а также как только происходит чтение из таблицы, эта таблица блокируется на запись для других транзакций. Другие транзакции могут только читать из этой таблицы.