1. 程式人生 > >SQL 視圖 局部變量 全局變量 條件語句 事務 觸發器

SQL 視圖 局部變量 全局變量 條件語句 事務 觸發器

tro break 服務器名稱 傳輸 回滾事務 觸發 n+1 exe 正在

一.視圖


1.視圖是一張虛擬表,他所存儲的不是實際數據,而是查詢語句,但我們可以對視圖進行像數據表一樣的操作。

2.為什麽使用視圖呢?我的理解是:1.在遠程傳輸數據時,可以避免過長的查詢字符,減少流量。2.他可以簡化繁雜的多表嵌套查詢語句。3.安全性,防止非法用戶訪問敏感數據,因為我們可以通過創建視圖展示給用戶,我們想要給他們查看的數據。

3.視圖的創建

create view vw_city
as
select cityName from city   --這個查詢語句可以隨便的寫,如果是些多層次的嵌套查詢語句的話,那麽下面使用視圖的簡易性就突出了。應為只用一句簡短的查詢語句就能把原本繁雜的搞定

4.視圖的查詢

select * from vw_city

5.由於視圖是以查詢語句的形式存儲的,所以一般視圖只用於查看數據,一般不對視圖進行增刪改。如果數據庫中的表數據改變那麽視圖中的數據也會隨之改變,因為視圖就相當於查詢語句。


二.局部變量(使用便於寫數據庫方法,及存儲過程等)


1.局部變量的聲明(一個@)

declare @n int   --聲明變量關鍵字為declare [email protected] 後面是變量類型
declare @s varchar(36) 

2.局部變量的賦值

技術分享
set @s=‘f4‘
set @[email protected]
/* */+1 --變量的賦值有兩種方法,一種是通過set,一種是select 如果變量不附初始值則默認為null,null參與計算的結果還是null,[email protected] select @n=age from students --如過變量通過select賦值,這裏可能在表中查到很多age結果,這裏只賦值查詢出來的最後一個age結果,如果set使用這種方法會出錯。 set @n=(select age from Students where ID=‘1‘)--亦可以這樣給他賦值 技術分享

三.全局變量


1.全局變量是系統自定義,維護的,我們不能修改全局變量的值。以@@開頭。

2.全局變量一覽

select APP_NAME ( ) as w --當前會話的應用程序

select @@ERROR --返回最後執行的 Transact-SQL 語句的錯誤代碼(integer)(如果最後一條語句不出錯,就一直是0)

select @@IDENTITY --返回最後插入的標識值

select USER_NAME() --返回用戶數據庫用戶名

select @@CONNECTIONS --返回自上次SQL啟動以來連接或試圖連接的次數。

select GETDATE() --當前時間

select @@CPU_BUSY/100 --返回自上次啟動SQL 以來 CPU 的工作時間,單位為毫秒

USE tempdb select @@DBTS as w --為當前數據庫返回當前 timestamp 數據類型的值。這一 timestamp 值保證在數據庫中是唯一的。

select @@IDLE as w --返回SQL自上次啟動後閑置的時間,單位為毫秒

select @@IO_BUSY AS w --返回SQL自上次啟動後用於執行輸入和輸出操作的時間,單位為毫秒

select @@LANGID AS w --返回當前所使用語言的本地語言標識符(ID)

select @@LANGUAGE AS w --返回當前使用的語言名

select @@LOCK_TIMEOUT as w --當前會話的當前鎖超時設置,單位為毫秒。

select @@MAX_CONNECTIONS as w --返回SQL上允許的同時用戶連接的最大數。返回的數不必為當前配置的數值

EXEC sp_configure --顯示當前服務器的全局配置設置

select @@MAX_PRECISION as w --返回 decimal 和 numeric 數據類型所用的精度級別,即該服務器中當前設置的精度。默認最大精度38。

select @@OPTIONS as w --返回當前 SET 選項的信息。

select @@PACK_RECEIVED as w --返回SQL自啟動後從網絡上讀取的輸入數據包數目。

select @@PACK_SENT as w --返回SQ自上次啟動後寫到網絡上的輸出數據包數目。

select @@PACKET_ERRORS as w --返回自SQL啟動後,在SQL連接上發生的網絡數據包錯誤數。

select @@SERVERNAME as w --返回運行SQL服務器名稱。

select @@SERVICENAME as w --返回SQL正在其下運行的註冊表鍵名

select @@TIMETICKS as w --返回SQL服務器一刻度的微秒數

select @@TOTAL_ERRORS AS w --返回 SQL服務器自啟動後,所遇到的磁盤讀/寫錯誤數。

select @@TOTAL_READ as w --返回 SQL服務器自啟動後讀取磁盤的次數。

select @@TOTAL_WRITE as w --返回SQL服務器自啟動後寫入磁盤的次數。

select @@TRANCOUNT as w --返回當前連接的活動事務數。

select @@VERSION as w --返回SQL服務器安裝的日期、版本和處理器類型。


四.條件語句


1.條件語句

技術分享
if(條件表達式)
begin
語句...
end
else
begin
語句...
end
技術分享

2.循環語句

while
begin
語句....
break/continue
end

五.事務(去不了終點,回到原點)


1.事務:如果你要一起執行多條語句,如果有一條失敗你就可以讓他們全部都撤銷執行。

技術分享
begin tran  --開啟一個事物
delete from city  
select * from city ---這裏查詢沒有數據,因為上一句刪除了
rollback tran  
select * from city  --這裏在查詢,驚奇的發現,數據又恢復了,因為上一句rollback是 讓這個事務回滾的效果,


begin tran  --開啟一個事物
delete from city  
select * from city ---這裏查詢沒有數據,因為上一句刪除了
commit tran  
select * from city  --這裏在查詢,不好意思,數據真的沒了,即便下邊你在rollback數據也回不來了,因為commit執行了數據真的把數據刪掉了
技術分享

2.事務小案例

技術分享
---bank表為轉賬表,MeMoney字段為我的賬余額,HeMoney為朋友的賬戶余額,這個事務完成的是我給朋友轉賬
begin tran
declare @ersum int        --定義這個局部變量為了記載這個事務過程中是否會出錯,如果出錯則最終將得不到為0的值,也就完成了我們判斷這個事務是否出錯過
set @ersum=0 
update bank set MeMoney=MeMoney-1000 where ID=me   ---從我卡裏扣掉1000
set @[email protected]+@@ERROR           --如果不出錯這裏還是0,如果錯了,這裏將不是0
update bank set HeMoney=HeMoney+100 where ID=he    ---給我朋友卡裏加上1000
set @[email protected]+@@ERROR     --如果這裏的結果是0將表明沒有出錯
if(@ersum<>0)  --true有錯,false沒錯
begin
rollback tran  ---回滾事務
end
else
begin
commit tran    --執行事務
end
技術分享

六.觸發器


1.觸發器,當數據庫中的表有所改動(添刪改)是會觸發一中事件,這樣一種機制,就是觸發器。

2.觸發器種類:after跟for一樣,是語句執行完畢後觸發事件。instead of :本來你要執行一種操作,結果執行了另外一種操作,原本要執行的操作被替換。

3.觸發器的創建

create trigger 觸發器名 on 操作表(實際要操作的表)
for|after|instead of  --選其任意一種類型,其中for跟after是一樣的
update|delete|insert    --原本要執行哪一種動作
as
sql語句.....    ---你想要執行的sql語句

4.觸發器的小案例

技術分享
--這個例子是,刪除Tb1裏面的數據,把刪除的數據同時備份到Tb1Bak表中
create trigger tri_bak on Tb1  --聲明一個tri_bak ,如果Tb1表中的數據變化觸發這個觸發器
after delete   ---刪除完成後執行下面的操作
as
insert into Tb1Bak select * from deleted   ---這裏的deleted是系統自動生成的表,存放為上一次的數據庫表中刪除的數據。
技術分享

5.小知識點:數據更新插入刪除的過程為,插入數據庫表的同時,也插入了系統表的insert表,刪除的同時把刪除的這條數據插入到了deleted表中,跟新的同時,deleted表中插入就數據,insert表中也添加了新數據。 我這裏的insert 、deleted表都為系統自動生成的,不是我們操作的表。


七.如果我哪裏寫錯了,或者你想說點什麽,歡迎留言。。

SQL 視圖 局部變量 全局變量 條件語句 事務 觸發器