儲存過程:
存儲過程是存儲在數據庫目錄中的一段聲明性SQL語句。 存儲過程是數據庫中的一個重要對象,用戶經過指定存儲過程的名字並給出參數來執行它。java
存儲過程的優勢:sql
① 加強了SQL語句的功能和靈活性;數據庫
② 不須要反覆創建一系列處理步驟,保證了數據的完整性;緩存
③ 下降了網絡的通訊量,客戶端調用存儲過程只須要傳存儲過程名和相關參數便可,與傳輸SQL語 句相比天然數據量少了不少;安全
④ 加強了使用的安全性,經過存儲過程可使沒有權限的用戶在控制之下間接地存取數據庫,從而 保證數據的安全;服務器
⑤ 能夠實現集中控制,當規則發生改變時,只須要修改存儲過程就能夠啦;網絡
存儲過程的缺點:分佈式
① 調試不是很方便;函數
② 可能沒有建立存儲過程的權利;學習
③ 從新編譯問題;
④ 移植性問題;
存儲過程的分類:
1)系統存儲過程: 以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工做。
2)本地存儲過程: 用戶建立的存儲過程是由用戶建立並完成某一特定功能的存儲過程,事實上通常所說的存儲過程就是指本地存儲過程。
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:表示數據庫名稱,可選參數,若是省略則表示從當前數據庫中刪除觸發器。】
謝謝你們閱讀,若是想要獲取更多java基礎知識,能夠戳我一塊兒交流學習!