SqlServer中檢視、儲存過程、事務的使用。
阿新 • • 發佈:2019-01-08
前言
熟悉SqlServer中檢視、儲存過程、事務的使用會在操作資料時帶來更大的方便。
正文
檢視-VIEW
VIEW介紹
- 定義:
檢視(VIEW)虛擬表,一般是不儲存資料的,但是Sqlserver的索引檢視例外(儲存資料),以下不考慮索引檢視。
是對查詢的Sql語句的封裝,只是預定義了一段sql語句,不會提高查詢效率。 - 優點或用途:
降低查詢複雜度:可以把很長的sql語句用一個viewName代替。
許可權控制:防止未經許可使用者訪問敏感資料。比如普通使用者只有檢視資料的權利,這時候就可以讓使用者只調用檢視。這樣當用戶賬號被獲取也不會對敏感資料造成影響。 - 系統檢視
系統預定義的檢視
VIEW使用
- 建立檢視
--vw_ShowsTable是檢視的名字
--as後面是你封裝的sql語句
create View vw_ShowsTable
as
select * from Shows where id>2
然後在資料庫下的檢視資料夾裡出現你剛才建立的檢視了
- 使用檢視
直接像表一樣呼叫就行了。
select * from vw_ShowsTable
這裡的view封裝的sql語句很短並沒體現優點,當sql語句很長時再通過view呼叫sql語句就會發現世界如此簡單。
儲存過程-SP
介紹
- 定義:
儲存過程(Stored Procedure)相當於C#中的函式,通過SP的name呼叫,可以有引數和返回結果。 - 優點或用途:
- 經過編譯-執行速度快
- 可以重複使用
- 提高安全性
- 使用簡單
當壓力比較大,可以把一部分壓力放在資料庫。但是以後修改起來比較麻煩。
- 系統SP
以sp_開頭,用來進行系統的各項設定.取得資訊.相關管理工作。
使用
- 建立SP
--usp_select_Shows是儲存過程名稱,後面可以跟引數
--begin end裡是你的sql語句
create proc usp_select_Shows
@n1 int
as
begin
select * from Shows where id>@n1
end
- 使用SP
--exec呼叫儲存過程,有引數的話在spName後面+空格+引數
exec usp_select_Shows 2
事務-Transaction
Transaction介紹
- 定義
事務(Transaction)是訪問並可能更新資料庫中各種資料項的一個程式執行單元(unit)。 優點或用途
正常sql出錯的執行順序:
開始執行-前幾條執行完成-出錯停止執行-後面幾條不執行。
但是有時候有其它需求:- 開始執行-出現錯誤-全部sql回滾,資料恢復到全部未執行狀態。
- 開始執行-出現錯誤-忽略出錯的sql繼續執行接下來的slq。
第一種是常用場合是轉賬。事務就能幫我們做到這兩種情況。
事務種類
自動事務:其實執行的普通sql語句都是一個事務,比如插入資料的sql出錯會恢復到未插入狀態,這就是自動事務的功勞。
隱式事務:
顯式事務:顯式事務是常用的事務,需要手動開啟事務,接下來講如何使用顯式事務。
使用顯式事務
出錯全部回滾:
begin tran -- 開始一個事務
declare @tran_error int --宣告一個變數用於檢測sql是否出錯
begin try -- try catch結構來檢測是否出錯,
-- 你的sql語句
end try
begin catch
set @[email protected]_error+1 --檢測到你的錯誤後變數加1
end catch
if (@tran_error > 0)
rollback tran -- 變數值改變就回滾
else
commit tran -- 變數值不變就提交
出錯後忽略錯誤語句繼續執行接下來的sql:
這種情況是需要設定xact_abort(精確終止),設定為on時出錯全部回滾(可代替上面的try-catch寫法),為off時出錯繼續執行下面sql。
-- 精確終止關閉
set xact_abort off;
begin tran
insert into sorce values (1,60)
insert into sorce values (2,"aa")
insert into sorce values (3,90)
commit tran
第二條sql因為資料型別錯誤會失敗,這種情況下,出錯後會忽略錯誤語句繼續執行下面的sql,第一第三句sql執行成功,第二句忽略。
請注意,不論提交或回滾,都代表當前事務結束,沒有end tran這個命令
當然還有其他的寫法不過大同小異,比如可以宣告事務的名稱、提交回滾都帶上事務的名稱。我覺得如果不是巢狀事務,沒必要宣告事務名稱