MySQL存儲過程 、存儲函數、以及優缺點

存儲過程 VS 存儲函數(函數)

| | 關鍵字 |調用語法 | 返回值 | 應用場景 |
|-存儲過程-|-procedure-|-call 存儲過程()-|-理解為0個或多個-|-一般用于更新-|
| 存儲函數 | function | select 函數() | 只能是一個 | 一般用于查詢結構為一個值并返回時|

存儲函數可以放在select語句中,存儲過程不行,反之,存儲過程的功能更加強大,包括能夠執行對表的操作(創建表、刪除表等)和事務操作,這些功能是存儲函數不具備的。

存儲過程和存儲函數的 查看、修改、刪除

查看
  1. show create 語句查看存儲過程和函數 創建信息
show create { procedure | function }  存儲過程名或函數名

在這里插入圖片描述
2. show status 語句查看存儲過程和函數 狀態信息

show { procedure | function } status [ like 'xxx' ]--[ like 'xxx' ] 匹配存儲過程或函數的名稱,可以省略。當省略不寫時,會列出**MySQL數據庫**中存在的所有存儲過程和函數 狀態信息

在這里插入圖片描述
3.從information_schema.routines 表中查看存儲過程和函數的信息

MySQL 中存儲過程和函數的信息存儲在information_schema數據庫下的Routines表中。可以通過查詢該表的記錄來查詢存儲過程和函數的信息。

select  *   from   information_schema.Routines
where ROUTINE_NAME='存儲過程 | 函數名'  [and ROUTINE_TYPE={'PROCEDURE | FUNCTION '}]\G

注意如果在mysql數據庫中存在存儲過程和函數名稱相同的情況,最好指定 ROUTINE_TYPE查詢條件是存儲過程還是函數。
在這里插入圖片描述

修改

修改存儲過程、函數,不影響存儲過程、函數功能,只能修改相關特性,使用alter語句實現
alter {procedure | function} 存儲過程或函數名稱
[characteristic]

在這里插入圖片描述

在這里插入圖片描述

刪除

drop { procedure | function } [IF exists] 存儲過程或函數的名

IF exists : 如果函數或存儲過程,不存在,刪除就報錯, 加 IF exists 就可以防止發生錯誤,只是產生warning ,同時可以用 show warnings 查看警告信息。
在這里插入圖片描述

關于存儲過程使用的爭議

優點
  1. 存儲過程可以一次編譯多次使用。 存儲過程只在創建時進行編譯,之后的使用都不需要重新編譯,所以提高了 SQL 的執行效率
  2. 可以減少開發工作量。 將代碼封裝成模塊,實際是是編程的核心思想之一,這樣可以把復雜的問題拆解成不同的模塊,然后模塊之間可以重復使用,在減少開發工作量的同時,還能保證代碼的結構清晰
  3. 存儲過程的安全性強。我們設定存儲過程可以在設置對用戶的使用權限,這樣就和視圖一樣具有較強的安全性
  4. 可以減少網絡傳輸量。 因為代碼封裝到存儲過程中,每次使用只需要調用存儲過程即可,這樣就減少網絡傳輸量。
  5. 良好的封裝性。在進行相對復雜的數據庫操作時,原本需要使用一條一條的SQL語句。可能需要連接多次數據庫才能完成的操作。現在變成一次存儲過程,只需要連接一次即可
缺點
  1. 可移植性差。 存儲過程不能跨數據庫移植,比如 在 MySQL、Oracle、SQL Server里編寫的存儲過程,在換成其他數據庫時需要重新編寫
  2. 調試困難。 只有少數DBMS支持存儲過程的調試,對于復雜的存儲過程來說,開發和維護都不容易。雖然也有些第三方工具可以對存儲過程進行調試,但要收費
  3. 存儲過程的版本管理困難。 比如數據表索引發生變化了,可能會導致存儲過程失效。我們在開發軟件的時候往往需要進行版本管理,但是存儲過程本身沒有版本控制,版本迭代更新的時候很麻煩
  4. 它不適合高并發的場景。 高并發的場景需要減少數據庫的壓力,有時數據庫會采用分表分庫的方式,而且對可擴展性要求很高,在這種情況下,存儲過程會變得難以維護,增加數據庫的壓力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40768.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40768.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40768.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三、python Django ORM postgresql[數據定時備份、數據恢復]

一、數據定時備份 解釋:備份指定數據庫,能有效在發生錯誤時,預防錯誤,進行恢復 1.基本備份 #!/bin/bash sudo -u postgres pg_dump -U postgres -d dbname -Fc > /home/postgres/backup/backup.dump # sudo -u postgres&…

訊飛星火、文心一言和通義千問同時編“貪吃蛇”游戲,誰會勝出?

同時向訊飛星火、文心一言和通義千問三個國產AI模型提個相同的問題: “python 寫一個貪吃蛇的游戲代碼” 看哪一家AI寫的程序直接能用,誰就勝出! 訊飛星火 訊飛星火給出的代碼: import pygame import sys import random# 初…

Android 13 開啟關閉飛行模式

一.背景 由于客戶定制的Settings里面需要開啟和關閉飛行模式,所以需要實現此功能。 二.前提條件 首先應用肯定要是系統應用,并且導入framework.jar包,具體可以參考: Android 應用自動開啟輔助(無障礙)功能并使用輔助(無障礙)功能_android 自動開啟無障礙服務_龔禮鵬的博客…

步入React正殿 - React組件設計模式

目錄 擴展學習資料 高階組件 /src/components/hoc/withTooltip.js /src/components/hoc/itemA.jsx /src/components/hoc/itemB.jsx /src/App.js 函數作為子組件【Render pprops】 函數作為子組件 /src/components/rp/itemC.jsx【父組件】 /src/components/rp/withToo…

C#調用C++ DLL傳參byte[]數組字節值大于127時會變為0x3f的問題解決

最近做了一個網絡編程的DLL給C#調用,DLL中封裝了一個TCP Client的函數接口,如下所示 //C TCP報文發送接口 int TcpClient_send(unsigned char* buffSend, unsigned int nLen) {unsigned char buff[1024];int len StringToHex(buffSend, buff);int nRet…

stable diffusion安裝包和超火使用文檔,數字人制作網址

一:文生圖、圖生圖 1:stable diffusion:對喜歡二次元、美女小姐姐、大眼萌妹的人及其友好哈哈(o^^o) 1):秋葉大神安裝包和模型包: 鏈接:https://pan.baidu.com/s/11_kguofh76gwhTBPUipepw 提…

機器學習 | Python實現GBDT梯度提升樹模型設計

機器學習 | Python實現GBDT梯度提升樹模型設計 目錄 機器學習 | Python實現GBDT梯度提升樹模型設計基本介紹模型描述模型使用參考資料基本介紹 機器學習 | Python實現GBDT梯度提升樹模型設計。梯度提升樹(Grandient Boosting)是提升樹(Boosting Tree)的一種改進算法,GBDT也…

Java System.arraycopy() 對比 C++ memcpy()

System.arraycopy() java.lang.System類為標準輸入和輸出、加載文件和庫或訪問外部定義的屬性提供了有用的方法。 java.lang.System.arraycopy()方法將源數組從特定的起始位置復制到上述位置的目標數組。要復制的參數的數量由一個參數決定。 source_Pos…

前端文件下載通用方法

zip文件和xlsx文件 import axios from axios import { getToken } from /utils/authconst mimeMap {xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,zip: application/zip }const baseUrl process.env.VUE_APP_BASE_API // zip下載 export functi…

214、仿真-基于51單片機溫度甲醛一氧化碳(co)電機凈化報警Proteus仿真設計(程序+Proteus仿真+配套資料等)

畢設幫助、開題指導、技術解答(有償)見文未 目錄 一、硬件設計 二、設計功能 三、Proteus仿真圖 四、程序源碼 資料包括: 需要完整的資料可以點擊下面的名片加下我,找我要資源壓縮包的百度網盤下載地址及提取碼。 方案選擇 單片機的選擇 方案一&a…

It‘s likely that neither a Result Type nor a Result Map was specified.

問題: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were 原因: 由于傳遞參數給 mapper 映射文件,所以必須要指定參數數據格式 如…

Qt+Pyhton實現麒麟V10系統下word文檔讀寫功能

目錄 前言1.C調用python1.1 安裝Python開發環境1.2 修改Qt工程配置1.3 初始化Python環境1.4 C 調用Python 函數1.5 常用的Python接口 2.python虛擬環境2.1Python虛擬環境簡介2.2 virtualenv 安裝及使用2.3 在C程序中配置virtualenv 虛擬環境 3.python-docx庫的應用4.總結 前言 …

神經網絡基礎-神經網絡補充概念-23-神經網絡的梯度下降法

概念 神經網絡的梯度下降法是訓練神經網絡的核心優化算法之一。它通過調整神經網絡的權重和偏差,以最小化損失函數,從而使神經網絡能夠逐漸逼近目標函數的最優值。 步驟 1損失函數(Loss Function): 首先&#xff0c…

Springboot多路數據源

1、多路數據源配置 (1)SpringBootMyBatis-PlusOracle實現多數據源配置 https://blog.csdn.net/weixin_44812604/article/details/127386828 (2)SpringBootMybatis搭建Oracle多數據源配置簡述 https://blog.csdn.net/HJW_233/arti…

網絡安全 Day29-運維安全項目-iptables防火墻

iptables防火墻 1. 防火墻概述2. 防火墻2.1 防火墻種類及使用說明2.2 必須熟悉的名詞2.3 iptables 執行過程※※※※※2.4 表與鏈※※※※※2.4.1 簡介2.4.2 每個表說明2.4.2.1 filter表 :star::star::star::star::star:2.4.2.2 nat表 2.5 環境準備及命令2.6 案例01&#xff1a…

神經網絡基礎-神經網絡補充概念-31-參數與超參數

概念 參數(Parameters): 參數是模型內部學習的變量,它們通過訓練過程自動調整以最小化損失函數。在神經網絡中,參數通常是連接權重(weights)和偏置(biases),…

ChatGLM2-6B安裝部署(詳盡版)

1、環境部署 安裝Anaconda3 安裝GIT 安裝GUDA 11.8 安裝NVIDIA 圖形化驅動 522.25版本,如果電腦本身是更高版本則不用更新 1.1、檢查CUDA 運行cmd或者Anaconda,運行以下命令 nvidia-smi CUDA Version是版本信息,Dricer Version是圖形化…

LeetCode 160.相交鏈表

文章目錄 💡題目分析💡解題思路🚩步驟一:找尾節點🚩步驟二:判斷尾節點是否相等🚩步驟三:找交點🍄思路1🍄思路2 🔔接口源碼 題目鏈接👉…

Ubuntu下mysql安裝及遠程連接支持配置

1.安裝 下載mysql-server(必須加sudo) sudo apt update sudo apt install mysql-server 查看mysql的狀態 sudo service mysql status 通過如下命令開啟mysql sudo service mysql start 2.配置 第一次安裝mysql后,為root設置一個密碼 …

Linux -- 進階 Autofs應用 : 光驅自動掛載 操作詳解

服務端自動掛載光驅 第一步 : 關閉安全軟件,安裝自動掛載軟件 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# yum install autofs -y 第二步 : 修改 autofs 主配置文件, 計劃掛載光…