數據庫的高級應用


數據庫的高級應用

數據庫五大高級應用:

視圖(view)索引(index)存儲過程(proc)觸發器(trigger)事務(trans

●●●●●●●●●●●●下面將對這五大應用詳細解●●●●●●●●●●●●

一 視圖(view):只是用來快速展示查詢數據:

主要內容:

l 視圖的概念以及優缺點

   視圖是一張虛擬表,他所展現的內容並沒有存儲在視圖表中而是存儲在他所引用的表中。

  優點簡化操作;根據不同用戶定制不同數據;合並分割數據;安全性;

  缺點:性能不高;數據修改受限;

l 單表視圖 多表視圖 基於視圖的視圖

創建視圖 語法結構:

Create view 視圖名[(column ,```````)]--column 列名

[with encryption ]

As

[With  check  option]--這條語句作用:規定在視圖上做過的修改必須符合引用表的要求;2 通過視圖修改的數據可以確保修改后的數據仍然可以通過視圖看到。

注意點:視圖中的查詢語句中不能包含 order by/ compute /compute by 或者是into關鍵字

例子:1單表視圖

創建視圖  create view jiage 

  As    select *from Car where Price between 30 and 50

  go

 引用 :select *from jiage

2帶有where 字段的視圖

Create view view2

As 

Select 姓名,工資 from 職工 where 工資>1800

Go

3帶有計算字段的視圖

  

Go 

多表視圖

 

帶有聚合函數的視圖

 

4更改原表中的字段名稱

create view view1 (車名,車的價格) --將新設置的列名在此設置。

as

select name,price from Car where Name like'%寶馬%'

go

select *from view1

 

l  利用sql 代碼修改視圖

alter view view1 (啥車,多錢) --可以同時更改原有視圖中的列名

as

select name,price from Car where Name like '%奧迪%'

go

select *from view1

l 利用sql 刪除 視圖

  《刪除單張視圖》 drop view 視圖名  《刪除多張視圖》 drop view view1view2~~~~

 《帶有判斷條件刪除視圖》

l 視圖數據的查詢

l 通過視圖添加更新以及刪除數據

 

二 索引(index

創建索引:create [unique][clustered][nonclustered] index index-name1  on [table|view](列名 asc|desc)

Unique 創建唯一索引,即索引的鍵值不能重復,在列包含重復值是不能創建唯一索引;

Clustered 指明創建的索引為簇索引,如果此選項默認,則創建的為非簇索引。

Nonclustered 指明創建的索引為非簇索引

例子: 1創建普通索引create index idex-scl on 倉庫備份(面積)

       2創建多列普通索引 create index idex-sc2 on 倉庫備份(城市,創建時間)

       3 刪除索引 drop index 表名.索引名    drop index 倉庫備份.index1

                                          

 

三存儲過程(proc

主要內容:

l 存儲過程的分類以及優點

   定義:為了完成特定功能的sql集合,編譯后存儲在服務器端數據庫中,利用存儲過程可以加速sql 語句的執行。

存儲過程可以分為兩類:系統存儲過程和自定義存儲過程。

系統存儲過程:系統存儲過程是在sql 成功安裝后存在系統數據庫master 中的,這些存儲過程是以sp- 為前綴命名的,主要功能是在系統表中獲取信息,系統管理員可以通過簡單的調用系統存儲過程完成復雜的管理工作,調用系統存儲過程時在其他非master數據庫中也可以調用

自定義存儲過程:有用戶自己定義完成特定功能,返回值只能表明返回值執行是否成功而且只能利用  想、execute 完成存儲過程。

優點: 提高應用程序的通用性和可移植性可以更有效的管理用戶操作數據庫的權限可以提高sql的速度 減輕服務器的負擔。

 

l 創建並執行存儲過程

   語法結構:

Create procedure  過程名

@ming 參數類型  output

~~

~~~

As

Begin    命令塊 end

創建完成后利用execute 過程名   [參數值~~][output]

例子:1功能為求0-5之間的和

 alter proc proc3

   as

 declare  @sum int,@a int

 select  @a=0,@sum=0

   while @a<6

   begin

    set @sum=@sum+@a

   set @a=@a+1

   End

print '和是'+cast(@sum as varchar)

 Go

Exectute proc3  

功能2 判斷系統商品庫存 以及購買者賬戶金額 決定交易是否進行

create proc shuiguo2

@idss varchar(10),

@buyer varchar(10),

@shuliang int

as

--判斷庫存

if (select numbers from Fruit where Ids=@idss)>@shuliang

begin

if(select price from Fruit where Ids=@idss )*@shuliang>(select account from Login where UserName=@buyer )

begin

--減庫存

update fruit set numbers=numbers-@shuliang where Ids=@idss

--減余額

update Login set Account=Account-(select price from Fruit)*@shuliang where UserName=@buyer

end

else

begin

print'余額不足,請充值!'

end

end

else

begin

print'抱歉,庫存不足!'

end

go

功能3 不帶參數的存儲過程 

4帶輸入參數的存儲過程

5帶有輸入參數的數據查詢功能的存儲過程

6帶有輸入輸出參數的存儲過程

7帶有登陸判斷功能的存儲過程

帶有判斷條件的插入功能的存儲過程(exists

9帶有判斷條件的刪除功能的存儲過程

10 帶有判斷條件的更新功能的存儲過程

11加密存儲過程 

Create proc 過程名

With encryption

As  命令塊   Go

★ 查看存儲過程的屬性以及功能代碼信息

execute sp_help proc3 --查詢存儲過程的屬性信息

execute sp_depends proc1--查詢存儲過程所使用的數據對象的信息,如果沒有引用或者加密會提示    沒有引用.

execute sp_helptext proc3--查詢存儲過程的功能代碼,如果加密后不能被查詢到

select name from car where type ='p'--能共查找本表創建存儲過程的名字和時間

l 修改存儲過程的功能代碼

   Alter proc 過程名

@參數   參數類型  ~~~~

As 

Begin   命令行   end

l 重命名存儲過程

    Execute sp_rename  原名, 新名

l 刪除存儲過程

Drop proc 過程名1,過程名2~~ 同時可以刪除多個過程

帶有判斷條件的刪除存儲過程(與if exists語句結合)

l 存儲過程的自動執行和監控  

l Oracle DB2數據庫中存儲過程的區別

 

四 觸發器(trigger

l 觸發器與存儲過程的區別

1.存儲過程是獨立於表存在的,觸發器需要依附某個表的某個操作。

2.存儲過程需要使用名稱去調用才能執行,觸發器則在表的操作過程中自動被觸發調用。

l 觸發器的分類和作用

   定義觸發器是一種特殊類型的存儲過程,通過事件的觸發來被執行,例如update delete drop alter drop等。   在sql 中有兩種方法可以保持數據的完整性和有效性:約束和觸發器,約束直接設置在表內只能執行一些比較簡單的功能,而觸發器可以執行比較復雜的過程。

作用: 可以調用存儲過程 2強化數據條件約束 3跟蹤數據庫內數據的變化並判斷數據變化是否符合數據庫的要求 4級聯和並行運行。

分類:DML 觸發器  DDL觸發器

  DML觸發器:data manipulation language  又可以分為 事后觸發器(after觸發器)替代觸發器 (instead of) 

  After 觸發器 先執行變得增刪改操作后在觸發觸發器 。

 Instead of 觸發器 不執行表的增刪改操作,它的這些操作只起到觸發觸發器的功能。

DDl 觸發器用來執行數據庫的管理任務。

注釋:

觸發器中兩個臨時表:inserted,deleted

這兩個表是臨時表,觸發器執行完成后,會自動消失,再次觸發會再次創建。

這兩個表的結構與on后面的那表的結構是一樣的(列名、列數、類型)。而且里面只有一條記錄。

插入操作--把新增的數據放到inserted表中。

刪除操作--把刪除的數據放到deleted表中。

修改操作--把舊數據放到deleted表中,把新數據放到inserted表中。

對兩個臨時表的使用。

從兩個臨時表中把數據取出來放到變量中,以備后面的使用。

l 創建執行事后觸發器

After  觸發器注意事項:觸發器名在同一數據庫中是唯一的;可以利用with encryption 對觸發器進行加密;  只能定義在數據表中不能定義在視圖上;after觸發器的動作只能是update delete insert 三種 其中的一種或者多種。

創建語法:

   Create trigger 觸發器名  on  表名 for  insert[update  delete]

   As

   Begin

   命令  

   End

實例:運行觸發器當數據表進行增刪改時自動發送郵件

Create  trigger 觸發器名 on表名 for insert[update delete]

As begin 

Execute xp_sendmail ‘郵箱地址’

end

l 創建與執行替代觸發器

注意點:instead of觸發器主要作用是使不可修改的視圖能夠支持修改。當然也可以對表進行操作。

構建語法:   Create trigger 觸發器名 on 表名或者視圖名 instead of  insert[delete update]

  As

Begin

命令塊

End

Go

 

l 查看觸發器的屬性以及功能代碼信息

l 修改觸發器的功能代碼

l 重命名和刪除觸發器

 Sp_rename 原名,新名  --重命名觸發器

 Drop trigger 觸發器名【123--可以同時刪除多個觸發器

 

l 禁用和啟用觸發器

Alter table 表名  disable trigger 觸發器名   禁用觸發器

 Alter table 表名    enable trigger 觸發器名   啟用觸發器

Alter table 表名    enable trigger 觸發器名1,觸發器名2  啟用多個觸發器觸發器

Alter table 表名    enable trigger all  啟用 這個表中的所有觸發器

 

l 創建與執行ddl 觸發器

DDL 觸發器一般用於數據庫的管理工作, 其觸發事件為 create alter drop 開頭的語句

創建DDl 觸發器語法結構:

Create trigger 觸發器名 on 服務器或者是數據庫

For或者after create[drop alter ]

As  begin

命令塊   

End

注意點: DDl 觸發器沒有替代觸發器只有事后觸發器,不同是作用於數據庫還是服務器

 

 

l 修改和刪除ddl 觸發器

l 觸發器的使用

 

 

 

 

五事務(begin trans  rollback返回 commit確定)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM