【SQL】存储过程procedure 触发器trigger
生活随笔
收集整理的這篇文章主要介紹了
【SQL】存储过程procedure 触发器trigger
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
關于存儲過程和觸發(fā)器,雖然之前聽過它們,但一直都沒有怎么實踐過。最近在項目過程中使用到了存儲過程和觸發(fā)器,趁熱打鐵,把它們總結一下。希望對您有所幫助。
procedure:? ? 存儲過程屬于數(shù)據(jù)庫,不屬于表。存儲過程就像數(shù)據(jù)庫中運行方法(函數(shù))一樣;和C#里的方法一樣,由存儲過程名、存儲過程參數(shù)組成,可以有返回結果。前面學習的if else/while/變量/insert/select等,都可以在存儲過程中使用。
advantage
? ? No2、允許模塊化程序設計。類似方法的調用。
? ? No3、提高系統(tǒng)安全性。防止SQL注入(與帶參數(shù)的SQL語句一樣可以防止SQL語句注入攻擊,帶參數(shù)的SQL語句其實是調用了sp_executesql存儲過程。)
? ? No4、減少網(wǎng)絡流量。只要傳輸存儲過程的名稱即可。
? ? No5、最主要的是執(zhí)行效率和SQL代碼的封裝。特別是SQL代碼封裝功能,如果沒有存儲過程,在外部程序訪問數(shù)據(jù)庫時,要組織很多SQL語句。特別是業(yè)務邏輯復雜的時候,一大堆的SQL語句和條件夾雜在程序設計代碼中,讓人不寒而栗。有了存儲過程,業(yè)務邏輯可以封裝在存儲過程中,這樣不僅易維護,而且執(zhí)行效率高。
classification
?? 自定義存儲過程:由用戶在自己的數(shù)據(jù)庫中創(chuàng)建的存儲過程
create grammar
as
begin
? ? sql 語句.....(可有多個)
end;
exec/call(具體數(shù)據(jù)庫執(zhí)行調用時的關鍵字) 存儲過程名(實參)(帶參數(shù)的存儲過程)
注:
參數(shù)的分類:in(表示存儲過程需要給它一個值,是默認的狀態(tài)) out(表示存儲過程會返回一個值) inout(既可以傳值進去 也可以帶值出來)。存儲過程limit后面不能使用參數(shù)。調用out存儲過程前,需要先定義一個變量:set @(不同編程語言中 不一定都是@)變量類名=值。
pay attention to
Example
trigger:
? ? [2]觸發(fā)器是一個特殊的存儲過程。觸發(fā)器是一種特殊類型的存儲過程,它不同于前面的一般的存儲過程?!驹赟QL內部把觸發(fā)器看做是存儲過程,但是不能傳遞參數(shù)】
? ? [3]一般的存儲過程通過存儲過程名稱被直接調用,而觸發(fā)器主要是通過事件進行觸發(fā)而被執(zhí)行。
? ? [4]觸發(fā)器是一個功能強大的工具,在表中數(shù)據(jù)發(fā)生變化時自動強制執(zhí)行。觸發(fā)器可以用SQL server約束、默認值和規(guī)則的完整性檢查,還可以完成難以用普通約束實現(xiàn)的復雜功能。
effect
classification
? ? No2、DDL觸發(fā)器:create table 、 create database、alter、drop...
pay attention to
Example
在所需表(類別表)下面創(chuàng)建trigger:
執(zhí)行刪除sql語句:
總結
以上是生活随笔為你收集整理的【SQL】存储过程procedure 触发器trigger的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在一个程序设计里,不同的功能窗口有着相似
- 下一篇: C#中using关键字的使用