Sql Server資料庫實驗之事務與鎖

2021-10-25 09:38:05 字數 2435 閱讀 7921

'李偉'

select

@borrnum

=borrnum from borrow order

by borrnum +

1select

@bno

=bno from book where btitle=

'資料結構'

select

@num

=count

(bno)

from borrow where bno=

@bno

and returndate is

null

if@num

<

5begin

insert

into borrow(borrnum,rno,bno,borrowdate)

values

(@borrnum

,@rno

,@bno

,@borrowdate

)commit

print

'李偉可以借閱資料結構'

endelse

begin

rollback

transaction

print

'此書已經被借閱完'

endgo

commit就是將資料庫中的資料提交到回滾段中,會覆蓋原先資料

rollback就是將回滾段中的資料回滾到資料庫中,不會覆蓋資料,不管先前有沒有設定回滾點,rollback回滾的資料都不會變,除非commit覆蓋了原先的資料

由第二題可以清楚地看出來

read uncommitted

讀未提交,顧名思義,就是乙個事務可以讀取另乙個未提交事務的資料。可能會髒讀。

read committed

讀提交,顧名思義,就是乙個事務要等另乙個事務提交後才能讀取資料。

可能會不可重複讀

repeatable read

重複讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作

可能會幻讀

serializable 序列化

serializable 是最高的事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀、不可重複讀與幻讀。但是這種事務隔離級別效率低下,比較耗資料庫效能,一般不使用。

設計的實驗:在兩個查詢視窗中分別建立名稱為

trans1和trans2的事務,在trans1中先後設定不同的事務隔離級別,執行兩次查詢語句,在trans2的事務中執行更新語句,比較執行結果。

begin

transaction trans1

use library1

goset

transaction

isolation

level

repeatable

read

select

*from reader where rname=

'王小明'

waitfor delay'00:00:10'

;select

*from reader where rname=

'王小明'

gocommit

transaction trans1

gobegin

transaction trans2

use library1

goupdate reader set rage=

24where rname=

'王小明'

gocommit

transaction trans2

go

sqlserver資料庫實驗一

1.一些sql語法sqlserver並不支援 2.當用insert插入date型資料的時候,要用單引號括起來 values 2012 10 1 3.增加乙個新的字段 alter table 表名稱 add 欄位名 字段型別 null not null 4.更新字段 update 表名稱 set 欄位...

資料庫之SQLServer

sqlserver更改身份驗證方式 sqlserver中char varchar nchar nvarchar的區別 1 定義 char 固定長度,儲存ansi字元,不足的補英文半形空格。nchar 固定長度,儲存unicode字元,不足的補英文半形空格 varchar 可變長度,儲存ansi字元,...

SQL Server之資料庫複製

sql server中備份,除了映象方式外還有複製方式。sqlserver 2012中還引進了alwayson,並且官方建議不再使用映象 資料庫複製 概述 複製是一組技術,它將資料和資料庫物件從乙個資料庫複製和分發到另乙個資料庫,然後在資料庫之間進行同步以保持一致性。使用複製,可以在區域網和廣域網 ...