mysql-存储过程
mysql---存储过程 了解存储过程之前,先了解一下mysql的控制结构。 类C语言(if……else、while循环等)SQL也有自己的控制结构。 if……else控制结构: 例如: (1) span style=font-family:FangSong_GB2312;if 判断表达式 then 执行语句;end if;与c语言进
mysql---存储过程了解存储过程之前,先了解一下mysql的控制结构。
类似C语言(if……else、while循环等)SQL也有自己的控制结构。
if……else控制结构:
例如:
(1)
<span style="font-family:FangSong_GB2312;">if 判断表达式 then 执行语句; end if; 与c语言进行比较 if(判断表达式) 执行语句;</span>
(2)
<span style="font-family:FangSong_GB2312;">if 判断表达式1 then 执行语句1; else then 执行语句2; end if; 与c语言进行比较 if(判断表达式1) 执行语句1; else 执行语句2;</span>
(3)
<span style="font-family:FangSong_GB2312;">if 判断表达式1 then 执行语句1; elseif 判断表达式2 then 执行语句2; …… elseif 判断表达式N then 执行语句N; else 执行语句N+1; end if; 与c语言进行比较 if(判断表达式1) 执行语句1; else if(判断表达式2) 执行语句2; …… else if(判断表达式N) 执行语句N; else 执行语句N+1;</span>
需要注意所有的执行语句和end if都要以‘;’结束,而且判断表达式之后接then,还有一点与C语言不同的是elseif之间没有空格。
mysql中还有一些与if相关的函数
if(判断表达式,值1,值2) 如果表达式为“true”返回“值1”,表达式为“false”返回“值2”。类似于C语言中的三目运算符。
ifnull(表达式1,表达式2)如果表达式1不为空,则返回表达式1。如果表达式1为空,则返回表达式2
nullif(表达式1,表达式2)如果表达式1=表达式2,返回null ,否则返回表达式1。
case when控制结构:
有两种形式
(1)
<span style="font-family:FangSong_GB2312;">case 待判断值 when 值1 then 输出1 when 值2 then 输出2 …… when 值N then 输出N else 默认输出 end; #如果输出时语句的话,最后的结尾要改成end case。输出的是值则是end 同C语言的switch相比较 switch(待判断值){ case 值1:输出1 break; case 值2:输出2 break; …… case 值N:输出N break; default:默认输出 }</span>
(2)
<span style="font-family:FangSong_GB2312;">case when 判断表达式1 then 输出1 when 判断表达式2 then 输出2 …… when 判断表达式N then 输出N else 默认输出 end case; #如果输出时语句的话,最后的结尾要是end case。输出的是值则是end。</span>
while循环结构:
<span style="font-family:FangSong_GB2312;">while 判断表达式 do 循环体 end while; C语言中的while循环 while(判断表达式){ 循环体; }</span>
loop循环结构:无条件循环
<span style="font-family:FangSong_GB2312;">标签:loop 循环体; end loop; 可以通过"leave 标签"来跳出loop循环。</span>
repeat循环结构:
<span style="font-family:FangSong_GB2312;">repeat 循环体; until 判断表达式 end repeat;</span>
现在开始介绍存储过程,其实存储过程跟函数很像
查看当前存储过程的状态:show procedure status;
创建存储过程:
<span style="font-family:FangSong_GB2312;">create procedure 名称(参数列表) begin 语句集 end;</span>
参数列表总是存在的,如果没有参数则应该是空参数列表(),参数必须指定数据类型而且每个参数默认都是一个in参数。要指定为其他参数,可以在参数前面加上out或inout关键字。默认的in类似于按值传递,在存储过程中对参数进行修改,调用者是看不到的。out参数只是用来从存储过程传回数据的,无论给参数传入什么值,这个参数的初始值始终是null。对于inout参数,调用者不仅可以设置参数的初始值,而且在过程中修改参数,调用者是看得到的类似与按地址传递。
删除存储过程:drop procedure 名称;
查看存储过程:show create procedure 名称\G 类似于show create table 表名 \G的作用是横向显示
调用存储过程:call 名称(参数);
声明变量:
(1)declare变量名 变量类型 默认值; 声明变量必须在开头定义,如果没有默认值,初始值为null。作用范围是在begin……end内
(2)set @变量名=初始值;定义的变量是用户变量,在存储过程之外的sql也是可以调用的
变量赋值:set 变量名=变量值 切忌直接给变量赋值(变量名= 变量值)
还有一种给一个或多个变量赋值的方法:利用“select 指定列 into 指定变量”,所以select的结果必须是单行。
示例:
所有示例,都实现将分界符设置为'$'
delimiter $
1、测试if-else控制结构
2、测试case……when
第一种情况:
输出是值,结尾用end。一般用于select
输出是语句,结尾用end case。一般用于存储过程
第二种情况:
输出是语句,结尾用end case。一般用于存储过程
输出是值,结尾用end。一般用于select
3、测试while循环
4、测试loop
5、测试repeat
6、带参数的存储过程
默认为in的参数:按值传递
初始值为0的变量tmp作为参数传入存储过程后,虽然在存储过程内对其进行修改,但调用者再次查看tmp时,值仍然为0,没有变化
out参数:
由第一个select可以看出,out参数不允许将实参的值传入存储过程。通过第二个和第三个select可以看出,存储过程内部修改变量后可以返回给调用者。
与按地址传递还有所不同,out只允许返回值,不允许传入值。
inout参数:按地址传递,形参值改变会改变实参的值
第一个select结果为0,说明实参的值传进存储过程。第二个和第三个select结果表明,inout可以在存储过程内部修改形参的值,从而影响实参,类似于按地址传递

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Vue3+TS+Vite開發技巧:如何進行資料加密和儲存隨著網路技術的快速發展,資料的安全性和隱私保護變得越來越重要。在Vue3+TS+Vite開發環境下,如何進行資料加密和存儲,是每個開發人員都需要面對的問題。本文將介紹一些常用的資料加密和儲存的技巧,幫助開發人員提升應用程式的安全性和使用者體驗。一、資料加密前端資料加密前端加密是保護資料安全性的重要一環。常用

本站3月7日訊息,華為資料儲存產品線總裁週躍峰博士日前出席MWC2024大會,專門展示了為溫資料(WarmData)和冷資料(ColdData)設計的新一代OceanStorArctic磁電儲存解決方案。華為資料儲存產品線總裁週躍峰發布系列創新解決方案圖來源:華為本站附上華為官方新聞稿內容如下:該方案的成本比磁帶低20%,功耗比硬碟低90%。根據國外科技媒體blocksandfiles報道,華為發言人也透露了關於該磁電儲存解決方案的資訊:華為的磁電磁碟(MED)是對磁性儲存媒體的重大創新。第一代ME

什麼是緩存?快取(發音為ka·shay)是一種專門的高速硬體或軟體元件,用於儲存經常要求的資料和指令,這些資料和指令又可用於更快地載入網站、應用程式、服務和系統的其他部分。快取使最常存取的資料隨時可用。快取檔案與快取記憶體不同。快取文件是指經常需要的文件,如PNG、圖標、徽標、著色器等,多個程式可能需要這些文件。這些檔案儲存在您的實體磁碟機空間中,通常是隱藏的。另一方面,高速緩存記憶體是一種比主記憶體和/或RAM更快的記憶體類型。它極大地減少了資料存取時間,因為與RAM相比,它更靠近CPU並且速度

ECache是一種Java快取框架,提供了一種簡單且強大的方法來減少電腦應用的回應時間。它透過將資料儲存在記憶體中,使應用程式能夠更快地回應客戶端請求,並提高系統吞吐量。在本文中,我們將介紹ECache快取技術的一些基礎知識,包括它的優點、安裝和使用方式等。一、ECache的優點提高系統效能:ECache將快取資料儲存在記憶體中,這意味著應用程式

TRedis快取技術是一種高效能的記憶體快取技術,能夠提高網站或應用程式的效能和回應速度。在本文中,我們將介紹TRedis快取技術的基本概念,以及如何在應用程式中使用它。什麼是TRedis快取技術? TRedis是一種記憶體快取技術,它可以將經常使用的資料儲存在記憶體中,從而提高存取這些資料的速度。這種技術的主要思想是透過使用記憶體快取來減少對資料庫或磁碟

Redisson是一種基於Redis的Java應用程式快取解決方案。它提供了許多有用功能,使得在Java應用程式中使用Redis作為快取變得更加方便和高效。 Redisson提供的快取功能包括:1.分散式映射(Map):Redisson提供了一些用於建立分散式映射的API。這些映射可以包含鍵值對、哈希表項或對象,它們可以支援在多個節點之間共

Git是一個快速、可靠、適應性強的分散式版本控制系統。它旨在支援分散式的非線性工作流程,使其成為各種規模的軟體開發團隊的理想選擇。每個Git工作目錄都是一個獨立的儲存庫,具有所有更改的完整歷史記錄,並且能夠追蹤版本,即使沒有網路存取或中央伺服器。 GitHub是託管在雲端的Git儲存庫,它提供了分散式修訂控制的所有功能。 GitHub是Git的儲存庫,託管在雲端。與作為CLI工具的Git不同,GitHub有一個基於Web的圖形使用者介面。它用於版本控制,這涉及與其他開發人員協作,並追蹤隨時間推移對腳本和

JSP檔案開啟方式JSP(JavaServerPages)是一種動態網頁技術,它允許程式設計師在HTML頁面中嵌入Java程式碼。 JSP檔案是一個文字文件,其中包含HTML程式碼、XML標記和Java程式碼。當JSP檔案被要求時,它會被編譯成JavaServlet,然後由Web伺服器執行。開啟JSP檔案的方法有幾種方法可以開啟JSP檔案。最簡單的方法是使用文字編輯器,
