Advertisement
Ladies_Man

db lab 10 seems to be working

Dec 13th, 2015
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.72 KB | None | 0 0
  1. if OBJECT_ID('dbo.cardholders') is not null
  2.     drop table dbo.cardholders
  3. go
  4. create table dbo.cardholders (
  5.     id          int,
  6.     name        varchar(35),
  7.     cardtype    varchar(35),
  8.     balance     int
  9.  
  10.     --uncomment PK for SERIALIZABLE
  11.     ,PRIMARY KEY (id)
  12. );
  13. go
  14.  
  15. insert into dbo.cardholders values
  16.     (1, 'George', 'Visa', 1000),
  17.     (2, 'Steve', 'Mastercard', 1337),
  18.     (3, 'Samwise', 'American Express', 1500)
  19. go
  20.  
  21. --============================================================
  22. --READ UNCOMMITED
  23. --Черновое чтение (Dirty read)
  24. --читатели могт считывать данные незваршенной транзакции
  25. --процесса-писателя
  26. --============================================================
  27.  
  28. begin transaction
  29.     select * from dbo.cardholders
  30.     update dbo.cardholders
  31.         set balance = 90
  32.         where id = 1
  33.     waitfor delay '00:00:05'
  34.     select * from dbo.cardholders
  35. commit
  36.  
  37.  
  38.  
  39.  
  40. --============================================================
  41. --READ COMMITED
  42. --Подтвержденное чтение
  43. --читатели не могут считывать данные незавершенной транзакции,
  44. --но писатели могут изменять уже прочитанные данные.
  45. --Если таблица захвачена, то прочитать данные
  46. --можно только после коммита
  47. --============================================================
  48. /*
  49. begin transaction
  50.     select * from dbo.cardholders
  51.     waitfor delay '00:00:05'
  52.         --immidiate result on reader cuz table is not locked
  53.         --only update/delete locks table
  54.     update dbo.cardholders
  55.         set balance = 90
  56.         where id = 1
  57.     select * from dbo.cardholders
  58. commit
  59. */
  60.  
  61.  
  62.  
  63. --============================================================
  64. --REPEATABLE READ
  65. --Повторяемое чтение
  66. --повторное чтение данных вернет те же значения,
  67. --что были и в начале транзакции.
  68. --При этом писатели могут вставлять новые записи,
  69. --имеющие статус фантома при незавершенной транзакции.
  70. --============================================================
  71. /*
  72. set transaction isolation level
  73.     repeatable read
  74. begin transaction
  75.     select * from dbo.cardholders where id in (1, 2)
  76.     waitfor delay '00:00:05'
  77.     select * from dbo.cardholders where id in (1, 2)
  78.         --insert is allowed
  79.         --modifications that affect data selected in t. are not allowed
  80.         --if data (row) is not locked then it can be modified
  81.     rollback
  82. select * from dbo.cardholders
  83. */
  84.  
  85.  
  86.  
  87. --============================================================
  88. --SERIALIZABLE
  89. --Сериализуемость
  90. --максимальный уровень изоляции,
  91. --гарантирует неизменяемость данных другими процессами
  92. --до завершения транзакции.
  93. --============================================================
  94. /*
  95. --add PRIMARY KEY
  96. set transaction isolation level
  97.     serializable
  98. begin transaction
  99.     select * from dbo.cardholders where id in (1,2)
  100.     waitfor delay '00:00:05'
  101.     select * from dbo.cardholders where id in (1,2)
  102.     --only rows in range 1..3 of PRIMARY KEY will be locked
  103.     --entire table can be modified
  104.     rollback
  105. select * from dbo.cardholders
  106. */
  107.  
  108.  
  109.  
  110. --============================================================
  111. --SNAPSHOT
  112. --Моментальный срез
  113. --читатели не ждут завершения транзакций писателей,
  114. --а считывают данные, точнее их версию,
  115. --по состоянию на момент начала своей транзакции.
  116. --============================================================
  117. /*
  118. set transaction isolation level
  119.     snapshot
  120. begin transaction
  121.     select * from dbo.cardholders
  122.     waitfor delay '00:00:05'
  123.     select * from dbo.cardholders
  124.         --snapshot doesnt hold lock on table
  125.         --so it can be reached in other sessions
  126.     rollback
  127. select * from dbo.cardholders
  128. */
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139. //PARALLEL QUERY:
  140.  
  141.  
  142. --READ UNCOMMITED
  143. set transaction isolation level
  144.     read uncommitted
  145. select * from dbo.cardholders
  146.  
  147.  
  148.  
  149. /*
  150. --READ COMMITED
  151. set transaction isolation level
  152.     read committed
  153. select * from dbo.cardholders
  154. */
  155.  
  156.  
  157. /*
  158. --REPEATABLE READ
  159. update dbo.cardholders set balance = 90 where id = 3
  160. insert into dbo.cardholders values (9, 'John', 'Visa', 0)
  161. */
  162.  
  163.  
  164. /*
  165. --SERIALIZABLE
  166. update dbo.cardholders set balance = 90 where id = 3
  167. */
  168.  
  169.  
  170. /*
  171. --SNAPSHOT
  172. update dbo.cardholders set balance = 90 where id = 3
  173. insert into dbo.cardholders values (9, 'John', 'Visa', 0)
  174. select * from dbo.cardholders
  175. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement