資料庫 儲存過程與觸發器

2021-10-11 03:00:59 字數 3558 閱讀 5803

儲存過程是儲存在資料庫目錄中的一段宣告性sql語句。 儲存過程是資料庫中的乙個重要物件,使用者通過指定儲存過程的名字並給出引數來執行它。

儲存過程的優點:

① 增強了sql語句的功能和靈活性;

② 不需要反覆建立一系列處理步驟,保證了資料的完整性;

③ 降低了網路的通訊量,客戶端呼叫儲存過程只需要傳儲存過程名和相關引數即可,與傳輸sql語 句相比自然資料量少了很多;

④ 增強了使用的安全性,通過儲存過程可以使沒有許可權的使用者在控制之下間接地訪問資料庫,從而 保證資料的安全;

⑤ 可以實現集中控制,當規則發生改變時,只需要修改儲存過程就可以啦;

儲存過程的缺點:

① 除錯不是很方便;

② 可能沒有建立儲存過程的權利;

③ 重新編譯問題;

④ 移植性問題;

儲存過程的分類:

3)臨時儲存過程:

①區域性臨時儲存過程

以井字型大小(#)作為其名稱的第乙個字元,則該儲存過程將成為乙個存放在tempdb資料庫中的本地臨時儲存過程,且只有建立它的使用者才能執行它;

②全域性臨時儲存過程

以兩個井字型大小(##)號開始,則該儲存過程將成為乙個儲存在tempdb資料庫中的全域性臨時儲存過程,全域性臨時儲存過程一旦建立,以後連線到伺服器的任意使用者都可以執行它,而且不需要特定的許可權。

4)遠端儲存過程:

在sql server2005中,遠端儲存過程(remote stored procedures)是位於遠端伺服器上的儲存過程,通常可以使用分布式查詢和execute命令執行乙個遠端儲存過程。

5)擴充套件儲存過程:

擴充套件儲存過程(extended stored procedures)是使用者可以使用外部程式語言編寫的儲存過程,而且擴充套件儲存過程的名稱通常以xp_開頭

建立儲存過程的引數:

procedure_name:儲存過程的名稱,在前面加#為區域性臨時儲存過程,加##為全域性臨時儲存過程。

number:是可選的整數,用來對同名的過程分組,以便用一條 drop procedure 語句即可將同組的過程一起除去。

parameter:儲存過程的引數。可以有乙個或多個。使用者必須在執行過程時提供每個所宣告引數的值(除非定義了該引數的預設值)。

data_type:引數的資料型別。所有資料型別(包括 text、ntext 和 image)均可以用作儲存過程的引數。

varying :指定作為輸出引數支援的結果集(由儲存過程動態構造,內容可以變化)。僅適用於游標引數。

default :引數的預設值。如果定義了預設值,不必指定該引數的值即可執行過程。預設值必須是常量或 null。

output:表明引數是返回引數。

recompile:表明 sql server 不會快取該過程的計畫,該過程將在執行時重新編譯。

encryption:表示 sql server 加密 。

for replication:指定不能在訂閱伺服器上執行為複製建立的儲存過程。

as:指定過程要執行的操作。

sql_statement:過程中要包含的任意數目和型別的 transact-sql 語句。但有一些限制。

呼叫儲存過程:

1)建立儲存過程:

create procedure 儲存過程名稱 (引數列表)

begin

過程體end;

例:

建立儲存過程:

create procedure porcedurename () 

begin

select name from user;

end;

2)呼叫儲存過程:

call 儲存過程名稱
例:

call porcedurename();
3)刪除儲存過程:

drop procedure 儲存過程名稱
觸發器是使用者定義在關係表上的一類由事件驅動的特殊的儲存過程。觸發器是指一段**,當觸發某個事件時,自動執行這些**。

觸發器作用:

(1) 強化約束(enforce restriction)

能夠實現比check 語句更為複雜的約束。

(2) 跟蹤變化(auditing changes)

可以偵測資料庫內的操作,從而不允許資料庫中未經許可的指定更新和變化。

(3) 級聯執行(cascaded operation)

可以偵測資料庫內的操作,並自動地級聯影響整個資料庫的各項內容。例如,某個表上的觸發器中包含有對另外乙個表的資料操作(如刪除,更新,插入)而該操作又導致該錶上觸發器被觸發。

(4) 儲存過程的呼叫(stored procedure invocation)

為了響應資料庫更新,觸發器可以呼叫乙個或多個儲存過程,甚至可以通過外部過程的呼叫而在dbms(資料庫管理系統)本身之外進行操作。

觸發器的限制:

1)觸發程式不能呼叫將資料返回客戶端的儲存程式,也不能使用採用call語句的動態sql語句,但是允許儲存程式通過引數將資料返回觸發程式,也就是儲存過程或者函式通過out或者inout型別的引數將資料返回觸發器是可以的,但是不能呼叫直接返回資料的過程;

2)不能再觸發器中使用以顯示或隱式方式開始或結束事務的語句;

建立觸發器:

(1)建立只有一條執行語句的觸發器

語法結構如下:

create trigger trigger_name trigger_time trigger_event on table_name for each row trigger_stmt
trigger_name:使用者自定義的觸發器名稱;

trigger_time:標識觸發事件,可以指定為before(時間發生前執行)或after(事件發生後執行);

trigger_event:標識觸發事件,包括insert、update、delete;

table_name:觸發器建立在哪個表上;

trigger_stmt:觸發器執行語句。

(2)建立有多個執行語句的觸發器

語法結構如下:

create trigger trigger_name trigger_time trigger_event on table_name for each row

begin

語句執行列表

end

【當觸發器有至少一條的執行語句時,多條執行語句需要用begin和end包裹,分別表示整個**塊的開始和結束。】

檢視觸發器:

show triggers;
刪除觸發器:

drop trigger [schema_name] trigger_name;
【schema_name:表示資料庫名稱,可選引數,如果省略則表示從當前資料庫中刪除觸發器。】

資料庫儲存過程與觸發器

資料庫儲存過程 儲存過程 stored procedure 是在大型 資料庫系統中,一組為了完成特定功能的sql 語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。優點 重複使用。儲存過程可以重複使用,從而可以減...

資料庫原理 儲存過程與觸發器

1 要求 1 執行儲存過程時,實引數等於儲存過程中形引數 實引數少於儲存過程中形引數 2 執行儲存過程 通過對錶操作觸發激發觸發器執行並檢視結果。實驗環境 mysql 實驗步驟 1 定義儲存過程 建立乙個能向學生表student中插入一條記錄的儲存過程insert student,該儲存過程需要五個...

資料庫儲存過程和觸發器

建立儲存過程 create procedure titles sum title varchar 40 sum money output asselect sum sum price from titles where title like title godeclare totalcost mon...