mysql之存儲過程和觸發器的應用

存儲例程:mysql

       存儲例程是存儲在數據庫服務器中的一組sql語句,經過在查詢中調用一個指定的名稱來執行這些sql語句命令。web

使用場景:sql

       咱們的應用程序分爲兩種:一種基於web,一種是基於桌面,他們都和數據庫進行交互來完成數據的存取工做。假設有一種應用程序包含了這兩種,如今要修改其中的一個查詢sql語句,那麼咱們可能要同時修改他們中對應的sql語句,當咱們的應用程序很龐大很負載的時候問題就出現了,不易維護!另外sql查詢放到咱們的web程序或桌面中易於遭到sql注入的破壞。而存儲過程正好能夠幫咱們解決這個問題。數據庫

     mysql中的存儲例程包含了存儲過程和存儲函數,他們統稱爲存儲例程
express

     存儲過程主要完成在獲取記錄或插入記錄或更新記錄或刪除記錄,即完成select,insert,delete,update等服務器

     存儲函數只完成查詢的工做,可接受輸入參數並返回一個結果
ide

     查詢數據庫的全部存儲過程:SHOWPROCEDURE  STATUS函數

     存儲過程語法:性能

         DEMILITER $$ --重定義分割符spa

              CREATE PROCEDURE sp_name()

              begin  --區塊定義開始

                ......

              end --區域定義結束

              $$  --定義的分割符

         刪除存儲過程:DROP PROCEDURE procedure_name

         變量定義:局部變量聲明必定放在存儲過程體的開始

             DECLARE variable_name  [,variable_name...]  DATATYPE  [default value]

             datatype 爲MySQL的數據類型,如int,float,date,varchar(length)

             例子:DECLARE  l_int  int  unsighed  default  40000;

          變量賦值:

               SET  變量名  = 表達式   [,variable_name = expression ...]


觸發器:

       不用想存儲過程須要再程序中進行調用,是在INSERT/PUDATE/DELETE等DML語句修改數據表時觸發。

       應用場景:重要的業務邏輯、提升性能、監控表的修改等

       語法:

        DELIMITER $$

         CREATE TRIGGER tri_stuname   --觸發器名稱

         trigger_time  --觸發時機 取值爲before/after

         trigger_event -- 觸發時間,取值爲INSERT/UPDATE/DELETE;  ON tbl_name --創建觸發器的表名

         FOR EACH ROW

         trigger_stmt --觸發器程序體, begin  ....end

       實例:

           DELIMITER $               create trigger tri_stuInsert after insert               on student for each row               begin               declare c int;               set c = (select stuCount from class where classID=new.classID);               update class set stuCount = c + 1 where classID = new.classID;               end$          DELIMITER ;

相關文章
相關標籤/搜索