一.視圖
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 然后@加變量名 后面是變量類型 declare @s varchar(36)
2.局部變量的賦值
set @s='f4' set @n=@n+1 --變量的賦值有兩種方法,一種是通過set,一種是select 如果變量不附初始值則默認為null,null參與計算的結果還是null,這一行的@n就等於null 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 @ersum=@ersum+@@ERROR --如果不出錯這里還是0,如果錯了,這里將不是0 update bank set HeMoney=HeMoney+100 where ID=he ---給我朋友卡里加上1000 set @ersum=@ersum+@@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表都為系統自動生成的,不是我們操作的表。
七.如果我哪里寫錯了,或者你想說點什么,歡迎留言。。