Advertisement
Ladies_Man

#DB Lab10 (transactions) COMPLETE

Jan 16th, 2016
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.78 KB | None | 0 0
  1. --Лабораторная работа №10. Режимы выполнения транзакций
  2.  
  3.  
  4. --1.Исследовать и проиллюстрировать на примерах различные уровни изоляции транзакций MS SQL Server,
  5.     --устанавливаемые с использованием инструкции SET TRANSACTION ISOLATION LEVEL.
  6.  
  7.  
  8.  
  9. --сначала запускается одна из транзакций QUERY1, во время ее выполнения параллельно запускается одна из транзакций QUERY2.
  10.  
  11.  
  12. QUERY1:
  13. if OBJECT_ID('dbo.cardholders') is not null
  14.     drop table dbo.cardholders
  15. go
  16. create table dbo.cardholders
  17. (
  18.     id          int,
  19.     name        varchar(35),
  20.     cardtype    varchar(35),
  21.     balance     int,
  22.  
  23.     PRIMARY KEY (id)
  24. );
  25. go
  26.  
  27. insert into dbo.cardholders values
  28.     (1, 'George', 'Visa', 1000),
  29.     (2, 'Steve', 'Mastercard, bescenno', 1337),
  30.     (3, 'Samwise the Brave', 'American Express', 1500)
  31. go
  32.  
  33. --«грязное» чтение(dirty read) – чтение транзакцией записи, измененной другой транзакцией,
  34.     --при этом эти изменения еще не зафиксированы;
  35.  
  36. --–невоспроизводимое чтение(non-repeatable read) – при повторном чтении транзакция обнаруживает
  37.     --измененные или удаленные данные, зафиксированные другой завершенной транзакцией; (update/delete)
  38.  
  39. --–фантомное чтение(phantom read) – при повторном чтении транзакция обнаруживает новые строки,
  40.     --вставленные другой завершенной транзакцией; (insert)
  41.  
  42.  
  43. --============================================================
  44. --READ UNCOMMITED
  45. --Черновое чтение (Dirty read)
  46. --читатели могт считывать данные незваршенной транзакции
  47. --процесса-писателя
  48. --============================================================
  49.  
  50. begin transaction
  51.     select * from dbo.cardholders
  52.     update dbo.cardholders
  53.         set balance = 90
  54.         where id = 1
  55.     waitfor delay '00:00:05'
  56.     select * from dbo.cardholders
  57. commit
  58.  
  59.  
  60.  
  61.  
  62. --============================================================
  63. --READ COMMITED
  64. --Подтвержденное чтение
  65. --читатели не могут считывать данные незавершенной транзакции,
  66. --но писатели могут изменять уже прочитанные данные.
  67. --Если таблица захвачена, то прочитать данные
  68. --можно только полсле коммита
  69. -->предотвращает грязное чтение
  70. --============================================================
  71.  
  72. begin transaction
  73.     select * from dbo.cardholders
  74.     update dbo.cardholders
  75.         set balance = 90
  76.         where id = 1
  77.     waitfor delay '00:00:05'
  78.         --моментальный результат у читателя, т.к. таблица не захвачена
  79.         --только upd/del захватывают таблицу
  80.    
  81.     select * from dbo.cardholders
  82. commit
  83.  
  84.  
  85.  
  86.  
  87. --============================================================
  88. --REPEATABLE READ
  89. --Повторяемое чтение
  90. --повторное чтение данных вернет те же значения,
  91. --что были и в начале транзакции.
  92. --При этом писатели могут вставлять новые записи,
  93. --имеющие статус фантома при незавершенной транзакции.
  94. -->предотвращает невоспроизводимое чтение
  95. --============================================================
  96.  
  97. set transaction isolation level
  98.     repeatable read
  99. begin transaction
  100.     select * from dbo.cardholders where id in (1, 2)
  101.     waitfor delay '00:00:05'
  102.     select * from dbo.cardholders where id in (1, 2)
  103.         --ins разрешен
  104.         --изменения, затрагивающие данные, выбранные в транзакции, запрещены
  105.         --если данные (строки) не захвачены, их можно менять
  106.     rollback --?
  107. select * from dbo.cardholders
  108.  
  109.  
  110.  
  111.  
  112. --============================================================
  113. --SERIALIZABLE
  114. --Сериализуемость
  115. --максимальный уровень изоляции,
  116. --гарантирует неизменяемость данных другими процессами
  117. --до завершения транзакции.
  118. -->предотвращает фантомное чтение
  119. --============================================================
  120.  
  121. set transaction isolation level
  122.     serializable
  123. begin transaction
  124.     select * from dbo.cardholders where id in (1,2)
  125.     waitfor delay '00:00:05'
  126.     select * from dbo.cardholders where id in (1,2)
  127.         --только строки в диапазоне (1 .. 2) PRIMARY KEY будут захвачены
  128.         --остальные строки таблицы можно изменять
  129.     rollback --?
  130. select * from dbo.cardholders
  131.  
  132.  
  133.  
  134.  
  135.  
  136. -------------------------------------------------------------------------
  137. QUERY2:
  138.  
  139.  
  140. --READ UNCOMMITED
  141.  
  142. set transaction isolation level
  143.     read uncommitted
  144. select * from dbo.cardholders
  145.  
  146.  
  147.  
  148. --READ COMMITED
  149.  
  150. set transaction isolation level
  151.     read committed
  152. select * from dbo.cardholders
  153.  
  154.  
  155.  
  156. --REPEATABLE READ
  157.  
  158. update dbo.cardholders set balance = 90 where id = 3
  159. insert into dbo.cardholders values (9, 'John', 'Visa', 0)
  160.  
  161.  
  162.  
  163. --SERIALIZABLE
  164.  
  165. update dbo.cardholders set balance = 90 where id = 2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement