視圖
1.視圖不占物理存儲空間,它只是一種邏輯對象。可將其看成一個"虛表"
視圖是一個由select 語句指定,用以檢索數據庫表中某些行或列數據的語句存儲定義
注:創建視圖語句中,不能包括order by、compute或者compute by 子句,也不能出現into關鍵字
2.創建水平視圖
視圖的常見用法是限制用戶只能夠存取表中的某些數據行,用這種方法產生的視圖稱為水平視圖,即表中行的子集
create view student_view1
as
select * from student
where (class_id='0903')
3.創建投影視圖
如果限制用戶只能存取表中的部分列的數據,那么,使用這種方法創建的視圖就稱為投影視圖,即表中列的子集
create view student_view2 as
select student_id as '學號' ,student_name as '姓名',sex as '性別' from student where sex=1 with check option /*強制視圖上執行的所有修改語句必須符合由select 語句設置的准則*/
4.創建聯合視圖
用戶可以生成從多個表中提取數據的聯合視圖,把查詢結果表示為一個單獨的"可見表"
索引
5.索引是數據庫的對象之一,索引是為了加速對表中數據行的檢索而創建的一種分散的一種存儲結構。
索引是針對一個表而建立的,它是由數據頁面以外的索引頁面組成的
6.索引的分類
聚簇索引
數據表的物理順序和索引表的順序相同,它根據表中的一列或多列值的組合排列記錄
create unique clustered index book_id_index--惟一性聚簇索引 on book(book_id asc) with fillfactor=50 /*填充因子50%*/
非聚簇索引
create nonclustered index student_course_index on student_course(student_id asc,course_id asc) with fillfactor=50
存儲過程
存儲過程是一系列預先編輯好的、能實現特定數據操作功能的SQL代碼集。它與特定的數據庫相關聯,存儲在SQL Server 服務器上
存儲過程的好處:
(1)重復使用。存儲過程可以重復使用,從而減少數據庫開發人員的工作量
(2)提高性能。存儲過程在創建的時候就進行了編譯,將來使用的時候就不用再編譯。一般的SQL語句使用一次就編譯一次,所以使用存儲過程提高了效率
(3)減少網絡流量。存儲過程位於服務器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此減低了網絡傳輸的運輸量
(4)安全性。參數化的存儲過程可以防止SQL注入攻擊,而且可以將Grant、Deny、以及Revoke權限應用於存儲過程
定義一個存儲過程:
create proc spAddStudents @name nvarchar(50)=null as begin transaction --事務 insert into [StudentInfo].[dbo].[Students] (Name) values (@name) if @@ERROR<>0 begin rollback tran return end commit transaction--提交事務
創建一個實現加法計算並將運算結果作為輸出參數的存儲過程
create proc spAdd @value1 int, @value2 int, @result int output as select @result=@value1+@value2 go
執行spAdd存儲過程
declare @value1 int declare @value2 int declare @result int set @value1=1 set @value2=1 exec spAdd @value1,@value2,@result output print convert(char(5),@value1) +'+'+convert(char(5),@value2) +'='+ convert(char(5),@result)
觸發器
觸發器是一種實施復雜數據完整性的特殊存儲過程,在對表或視圖執行update、insert或delete語句時自動觸發執行,以防止對數據進行不正確、未授權或不一致的參數
/*創建update觸發器*/ create trigger [dbo].[TaocanType_update] on [dbo].[Table_TaocanType] for update as update [dbo].[Table_ChoseTaocanType] set Taocan=inserted.Taocan from [dbo].[Table_ChoseTaocanType] ,inserted where [dbo].[Table_ChoseTaocanType].TaocanId=inserted.TaocanId
觸發器能夠維持兩個表間的參照完整性,就像外鍵一樣。外鍵執行這個任務的效率更高,因為它們在數據改變之前被測試,而不像觸發器在數據改變后才觸發
游標
游標是一種處理數據的方法,為了查看或者處理結果集中的數據,游標提供了在結果集中向前或者向后瀏覽數據的能力
(1)創建游標
(2)打開游標
(3)讀取數據
(4)數據操作
(5)關閉和釋放游標
declare @taocan nvarchar(50),@youhui nvarchar(50)
declare taocan_cursor scroll cursor --聲明游標 for select Taocan,youhui from [189Shop].[dbo].[Table_TaocanType] for read only open taocan_cursor ---打開游標 fetch from taocan_cursor into @taocan,@youhui --從游標中提取行 while @@FETCH_STATUS=0--表示成功完成FETCH 語句 begin print '套餐:'+@taocan+',優惠:'+@youhui fetch from taocan_cursor into @taocan,@youhui end close taocan_cursor --關閉游標 deallocate taocan_cursor --釋放游標
事務
所謂事務,是指一個操作序列,這些操作序列要么都被執行,要么都不被執行,它是一個不可分割的工作單元