您好,登錄后才能下訂單哦!
下文內容主要給大家帶來Mysql存儲過程定義及講析,這里所講到的知識,與書籍略有不同,都是億速云專業技術人員在與用戶接觸過程中,總結出來的,具有一定的經驗分享價值,希望給廣大讀者帶來幫助。
一、什么是mysql存儲過程?
是在數據庫系統中,一組為了完成特定功能SQL語句集,經編譯后存儲在數據庫中,用戶通過制定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。
存儲過程是經過編譯的SQL語句集。編譯后節省很多性能。
二、為什么使用存儲過程?
1、存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需要再重新編譯,而一般SQL語句每執行一次就編譯一次,所以存儲過程可以提高數據庫執行速度
2、當對數據庫進行復雜操作時(如對多個表進行UPDATE,INSERT,QUERY,DELETE時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用,這些操作如果用程序來完成,就變成一條條的SQL語句,可能要多次鏈接數據庫,而換成存儲過程,只需要鏈接一次數據庫就可以了
3、存儲過程可以重復使用,可以減少數據庫開發人員的工作量
4、安全性高,可設定只有某些用戶才具有對指定存儲過程的使用權
三、存儲過程的缺點
1、可移植性差
2、對于簡單的SQL語句,存儲過程沒什么優勢
3、存儲過程中不一定會減少網絡傳輸
4、如果一個用戶使用數據庫,那么存儲過程對安全也沒什么影響
5、團隊開發時需要統一標準,否則后期維護起來麻煩
6、在大并發訪問量的情況下,不宜寫過多涉及運算的存儲過程
7、業務邏輯復雜時,特別是涉及到對很大的表進行操作的時候,不如在前端先簡化業務邏輯
四、存儲過程和函數、觸發器的區別
1、觸發器用于完成一些觸發條件所引發的操作,觸發器的執行是自動化的
2、自定義函數只能通過return語句返回單個值或者表對象,而存儲過程不能調用return語句,但可以通過out參數返回多個值。函數可以在SQL語句中結合使用,函數不能用臨時表,只能用表變量,還有一些系統函數都不可用
3、存儲過程用于完成一系列的SQL操作,批量的完成數據庫操作工作,由使用者調用執行
五、存儲過程的創建
解析:
1、寫mysql存儲過程,首先改變語句結束符,一般改成 //,因為存儲過程一般包含多條SQL語句,如果使用默認結束符可能中斷SQL的運行
2、mysql> CREATE PROCEDURE存儲過程的固定語句,后面跟存儲過程的名稱,()里面包含(存儲過程的參數 參數名稱 數據類型)
3、BEGIN....END是存儲過程的開始和結束符號,中間是存儲過程的內容
4、//結束,表示整個存儲過程的語句已經書寫完畢
5、書寫完畢后將mysql的結束符改回成 ;
6、CALL加上存儲過程的名稱、參數來調用存儲過程
存儲過程的參數
格式:
CREATE PROCEDURE 存儲過程名([[IN |OUT |INOUT ] 參數名 數據類形...])
參數IN的特點:存儲過程運行時,讀取外部變量值,存儲過程完成后,其外部變量的值不發生改變,依然是存儲過程外部設定的變量值
參數OUT的特點:不讀取外部變量的值,存儲過程運行完成后,外部變量的值更新為存儲過程內部的值
參數INOUT的特點:運行存儲過程時,讀取外部變量的值,存儲過程運行完成后,外部變量的值更新為存儲過程內部的值
對于以上關于Mysql存儲過程定義及講析,如果大家還有更多需要了解的可以持續關注我們億速云的行業推新,如需獲取專業解答,可在官網聯系售前售后的,希望該文章可給大家帶來一定的知識更新。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。