溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql的存儲過程和觸發(fā)器的使用 以及php中的調(diào)用方法

發(fā)布時間:2020-07-27 20:51:15 來源:網(wǎng)絡(luò) 閱讀:731 作者:wangchunyi123 欄目:數(shù)據(jù)庫

      存儲過程顧名思義,相當(dāng)于一組為了完成特定功能的sql語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程是數(shù)據(jù)庫中的一個重要對象,任何一個設(shè)計良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲過程。

       存儲過程的書寫格式:
  CREATE PROCEDURE [
擁有者.]存儲過程名[;程序編號]
  [(
參數(shù)#1,…參數(shù)#1024)]
  [WITH
  {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
  ]
  [FOR REPLICATION]
  AS 
程序行

        其中存儲過程名不能超過128個字。每個存儲過程中最多設(shè)定1024個參數(shù)
  (SQL Server 7.0
以上版本),參數(shù)的使用方法如下:
  @
參數(shù)名數(shù)據(jù)類型 [VARYING] [=內(nèi)定值] [OUTPUT]
  
每個參數(shù)名前要有一個“@”符號,每一個存儲過程的參數(shù)僅為該程序內(nèi)部使用,參數(shù)的類型除了IMAGE外,其他SQL Server所支持的數(shù)據(jù)類型都可使用。

   output:表示此參數(shù)是可傳回的
  with {recompile|encryption}
  recompile:
表示每次執(zhí)行此存儲過程時都重新編譯一次
  encryption:
所創(chuàng)建的存儲過程的內(nèi)容會被加密


      使用存儲過程有以下的優(yōu)點:
  * 
存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復(fù)雜的判斷和較復(fù)雜的運算。
  * 
可保證數(shù)據(jù)的安全性和完整性。
  # 
通過存儲過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全。
  # 
通過存儲過程可以使相關(guān)的動作在一起發(fā)生,從而可以維護數(shù)據(jù)庫的完整性。
  * 
再運行存儲過程前,數(shù)據(jù)庫已對其進行了語法和句法分析,并給出了優(yōu)化執(zhí)行方案。這種已經(jīng)編譯好的過程可極大地改善SQL語句的性能。由于執(zhí)行SQL語句的大部分工作已經(jīng)完成,所以存儲過程能以極快的速度執(zhí)行。
  * 
可以降低網(wǎng)絡(luò)的通信量。
  * 
使體現(xiàn)企業(yè)規(guī)則的運算程序放入數(shù)據(jù)庫服務(wù)器中,以便:
  # 
集中控制。
  # 
當(dāng) 企業(yè)規(guī)則發(fā)生變化時在服務(wù)器中改變存儲過程即可,無須修改任何應(yīng)用程序。企業(yè)規(guī)則的特點是要經(jīng)常變化,如果把體現(xiàn)企業(yè)規(guī)則的運算程序放入應(yīng)用程序中,則當(dāng) 企業(yè)規(guī)則發(fā)生變化時,就需要修改應(yīng)用程序工作量非常之大(修改、發(fā)行和安裝應(yīng)用程序)。如果把體現(xiàn)企業(yè)規(guī)則的運算放入存儲過程中,則當(dāng)企業(yè)規(guī)則發(fā)生變化 時,只要修改存儲過程就可以了,應(yīng)用程序無須任何變化。

php操作方法

     mysql_query("call 存儲過程名稱")

觸發(fā)器

     是mysql內(nèi)部進行執(zhí)行的,觸發(fā)器是與表有關(guān)的命名數(shù)據(jù)庫對象,當(dāng)表上出現(xiàn)特定事件時,將激活該對象。例如當(dāng)我們向某表插入一行數(shù)據(jù)時發(fā)生一個事件或者刪除某個記錄時觸發(fā)某個事件。

語法:
    CREATE TRIGGER trigger_Name trigger_time trigger_event
       ON tbl_Name FOR EACHROW trigger_stmt
    trigger_time 是觸發(fā)器的動作時間。它可以是 BEFORE 或 AFTER ,以指明觸發(fā)器是在激活它的
語句之前或之后觸發(fā)。
    trigger_event 指明了激活觸發(fā)器的語句的類型。trigger_event        可以是下述值之一:
    INSERT:將新行插入表時激活觸發(fā)器,例如,通過 INSERT、LOADDATA 和 REPLACE 語句;
    UPDATE:更改某一行時激活觸發(fā)器,例如,通過UPDATE語句;
    DELETE:從表中刪除某一行時激活觸發(fā)器,例如,通過 DELETE 和 REPLACE 語句。

                

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI