MYSQL--存儲過程操作

一:概念:

? ? ? ? 存儲過程實際上對標了JAVA當中的方法,兩者是相似的,同時需要注意的一點是,MYSQL僅僅在5.0版本之后才出現這種存儲操作的過程;

? ? ? ?

優點:

? ? ? ? 1.存儲過程能夠讓運行的速度變得更加迅速,僅僅只有首次進行實用的時候需要進行相應的編譯,之后再次調用的時候可以直接進行實用

? ? ? ? 2.存儲過程的特點:模塊化,代碼復用,封裝。

二:分類

1.存儲過程關鍵語句

2.變量

3.參數傳遞

4.分支語句

5.循環語句

6.游標

7.異常處理handler

1.存儲過程關鍵語句:

delimiter (設置啟動的標識符);
create procedure (存儲過程的名稱) (參數傳遞關鍵詞 參數名稱 參數類型);
begin(檢索代碼)
end (開始設置的標識符);
delimiter  ;

2.變量:

1>變量類型:

①:局部變量

②:用戶變量

③:參數變量

2>變量介紹:

? ? ? ? ①:局部變量

? ? ? ? 范圍:顧名思義,局部變量的作用范圍比較的小,僅僅只能夠作用在存儲過程當中的begin--end之間進行實用,一旦超出范圍進行調用,檢索的時候就無法進行搜索:

? ? ? ? 關鍵語句:

delimiter ..;
create procedure ...()begindeclare (局部變量名稱) 局部變量的類型 [default ....(初始化)];
-- 開始對于局部變量進行賦值set (局部變量名稱) = ...;(其他檢索)
end ...;
delimiter ;select (局部變量名稱); -- 不成功,因為在存儲過程begin-end之外運行

? ? ? ? ②用戶變量:

? ? ? ? 范圍:用戶變量的作用范圍有所增大,可以作用于當前的會話,也就是作用在當前互聯網跟mysql的連接ing

? ? ? ? 關鍵語句:

TIPS:
-- 1.需要注意的一點是,對于所有的用戶變量,都不需要進行聲明,賦值即聲明
-- 2.對于所有的用戶變量,都能夠在存儲過程的外面進行調用delimiter ...;
create procedure ...()
begin set (用戶變量名稱) =  ;
end ...;
delimiter ;select (用戶變量名稱); -- 可以搜索到相應的結果

? ? ? ? ③參數變量:

? ? ? ? 參數變量又可以分為兩個部分,一個是全局變量,一個是會話變量

? ? ? ? ? ? ? ? 1.全局變量:

? ? ? ? ? ? ? ? ? ? ? ? 1>范圍:

? ? ? ? ? ? ? ? ? ? ? ? 對于全局變量的修改會影響到一整個的服務器,并且對于全局變量來說,在MYSQL啟動的時候由服務器自動對他們進行默認初始化,這些默認值可以通過my.in這個文件進行修改

? ? ? ? ? ? ? ? ? ? ? ? 2>關鍵語句:

關鍵使用語句:global
1.查看全局變量:
select global variables(全局變量名稱);
2.查看具體的全局變量
show global@@.(相應的全局變量名稱);
3.修改全局變量的值
set global (全局變量名稱) = new_value;
? ? ? ? ? ? ? ? ? ? ? 2.會話變量:

? ? ? ? ? ? ? ? ? ? ? ? 1>作用范圍:

? ? ? ? ? ? ? ? ? ? ? ? 對于會話變量,會在每一次建立新的連接的時候,MYSQL會對其進行初始化,將全局變量的值賦值一份用來當作當前新建會話的會話變量

? ? ? ? ? ? ? ? ? ? ? ? 2>關鍵語句:

1.查看局部變量
select session variables;2.查看具體的局部變量
select @session.(局部變量名稱);3.修改局部變量的值
set session (局部變量名稱) =new_value;

????????TIPS: 其實兩個變量大體上是一樣的,僅僅只有在作用范圍上不同,其他的都是一樣。因此,如果兩個變量都沒有修改,那么全局變量跟用戶變量的值是一樣的,兩者并沒有區別;

三.參數傳遞:

? ? ? ? 1.類型:參數傳遞主要分為三個,包括有三個部分分別是in,out,inout

? ? ? ? 2.介紹:

? ? ? ? ? ? ? ? 操作:

in:讓數據能夠進入到存儲過程當中進行查詢
delimiter \\;
create procedure emp_1(in name varchar(20))
begin select * from emp e where e.name=name;  -- 第二個name代表的是傳入的參數的名稱
end \\;
delimiter ;out:能夠讓參數進行返回使用
delimiter \\;
create procedure emp_2(in name varchar(20),out id int)
begin select e.id into id from emp e where e.name=name;  -- 第二個name代表的是傳入的參數的名稱
end \\;
delimiter ;call emp_2(‘劉一’,@id);
select @id;inout:能夠對于輸入的值進行修改,之后再進行返回
delimiter \\;
create procedure emp_3(inout name varchar(20))
begin select * from emp e where e.name=name;  -- 第二個name代表的是傳入的參數的名稱
end \\;
delimiter ;
set name='王老師';
call emp_3(name);

四:分支語句

? ? ? ? 1.分類:

? ? ? ? ?分支語句主要包括有幾個部分,if分支,case分支

? ? ? ? 2.

? ? ? ? ? ? ? ? ①:if分支

關鍵語句:
if (條件) then 查詢;
elseif (條件...) then查詢:
else default(設置除了這些之外的其他操作會有什么結果)
endif;delimiter \\;
create procedure pro-1(in single int)
begin 
if single=1 
-- 如果輸入數字為1那么就顯示所有的員工信息;then select * from emp;
eles  select '錯誤選項';
endif;
end \\;
delimiter ;有關if的其他小知識:
leava 表示直接離開當前的條件判斷  -- 相當于JAVA當中的break;
iterate 表示的是跳過當前的判斷  -- 類似于在java當中的continue;

②case分支:

類似于JAVA當中的switch語句
語法一:
case case_value(變量名稱)when when_value then select語句when when_value then select語句[else default]
end case;語法二:
casewhen search_condition then select...when search_condition then select...[else default]
end case;

五:循環語句:

? ? ? ? 循環語句主要可以分為三大類:while , loop ,repeat

? ? ? ? 循環是一種雖然只會程序當中出現一次,但是能夠運行多次的代碼

1.while

while循環類似于JAVA當中的while的循環,都是先判斷條件,判斷正確之后,可以再執行之后的語句,否則結束循環語句:
while(condition_value) do
循環體
end while;加入到存儲過程當中:一:在表格當中插入數據,并且為自己控制插入多少條,設置use1存儲過程
create table emp1(
id int primary key,
name varchar(20),
user varchar(20)
);delimiter \\;
create procedure use1(in single int)
begin declare i int default 1;
while(i<=single) doinsert into emp1 values(i,concat('user',i),'123456');set i = i+1;
end while;二:在表格當中插入single_0條數據,但是跳過第single_1條數據,設置use2存儲過程
delimiter \\;
create procedure use2(in single_0 int,in single_1 int)
begindecalre i int default 1;
w while(i<=single_0) doa if(i = single_1) thenset i = i+1; iterate a;else insert into emp values(i,concat('user',i),'123456');set i = i+1;end if;
end while;
end \\;
delimiter ;

2.repeat循環語句

repeat循環相當于之前在java當中所學習的do-while循環,需要先執行查找語句,之后再進行判斷條件語句:
[標簽] repeat
循環體;
utile when_value;
end repeat[標簽];

3.loop循環

loop循環不需要條件的判斷,能夠一直進行執行,所以,如果需要跳過循環,那么就需要使用相應的if條件判斷,從而跳出這個死循環 -- 對應了java當中的while(true)循環語法:
[循環標簽] loop 
循環體:
if when_value then....
elseif when_value then...
...leave [循環標簽];...
end if;
end loop;

六.游標

1.介紹

? ? ? ? 游標是一種能夠存儲查詢結果集的數據類型,在存儲過程當中可以使用光標對結果進行一定的循環處理

2.使用

? ? ? ? 光標的使用包括:光標的聲明,光標的打開,數值的獲取,光標的關閉

-- 聲明:
declare 游標名稱 cursor for select_statement
-- 打開語法
open 游標名稱
-- 取值語法
fetch 游標名稱 into decl_name.....
-- 關閉語法
close 游標名稱;

七.handler異常處理

1.介紹:

? ? ? ? 在MYSQL當中,針對一些錯誤機制進行處理的方法,通過HANDLER的使用,能夠在MYSQL查詢的過程當中避免一些錯誤類型的出現;

2.語法:

handler 異常處理聲明:declare (handler_action handler)for (condition_value) statement;handler_action:主要包括有三大部分
1.contitue  在錯誤出現之后繼續之后的查詢
2.exit 在錯誤出現之后不再進行之后的查詢,直接結束所有的查詢
3.UNDO不建議condition_value主要包括以下的幾個部分
mysql_error_code
condition_name
SQLWARNING 
NOT FOUND 未查詢到相應的數據
SQLEXCEPTION SQL查詢錯誤同時的,如果需要使用handler句柄進行異常處理,首先需要考慮:
1.如果發現錯誤了,之后需要進行什么操作(condition_value)
2.這種錯誤是什么樣的錯誤類型condition_valueTIPS:需要注意的一點,對于各種聲明,順序是,變量聲明,游標聲明,handler聲明的順序

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

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

相關文章

SpringBoot指定外部環境配置

nohup java -Xms256m -Xmx512m -Dfile.encodingUTF-8 -jar /usr/local/xxxx.jar --spring.profiles.activeprod > system.log 2>&1 & --spring.profiles.activeprod修改的是多環境配置中內部application.properties里的spring.profiles.active值 -Dspring.config…

ubuntu 查詢流量使用

在Ubuntu系統中&#xff0c;可以使用nethogs命令來查看每個進程的網絡流量使用情況。這個工具可以顯示每個進程的實時網絡流量&#xff0c;從而可以找出使用流量最多的應用。 首先&#xff0c;你需要安裝nethogs。在終端中輸入以下命令&#xff1a; sudo apt install nethogs…

消息隊列MQ 保證消息不丟失(消息可靠性)

文章目錄 概述RabbitMQ 怎么避免消息丟失&#xff08;可靠傳輸&#xff09;RocketMQ 怎么確保消息不丟失Kafka 怎么保證消息不丟失activeMQ 怎么避免消息丟失MQ 宕機了消息是否會丟失線上服務宕機時&#xff0c;如何保證數據100%不丟失嗎&#xff1f;消息隊列消息持久化 概述 …

思偉老友記 | 攜手并進17年 中泰公司的穩步發展和企業傳承

17年攜手并進 合作共贏 2023年是中泰&#xff08;福建&#xff09;混凝土發展有限公司攜手思偉軟件的第17年。在這關鍵的17年間&#xff0c;我們共同經歷了一個行業的興盛發展&#xff0c;也相互見證了彼此的榮耀成長。中泰從泉州惠安洛陽江邊一個簡單的攪拌站&#xff0c;到如…

h-table(表格列表組件的全封裝)

文章目錄 概要h-table的封裝過程查詢組件封裝 h-highForm結果頁右側工具欄封裝RightToolbar結果頁列表組件h-table結果頁vue頁面使用js文件有需要的請私信博主&#xff0c;還請麻煩給個關注&#xff0c;博主不定期更新組件封裝&#xff0c;或許能夠有所幫助&#xff01;&#x…

如何做代幣分析:以 SOL 幣為例

作者&#xff1a;lesleyfootprint.network 編譯&#xff1a;cicifootprint.network 數據源&#xff1a;Solana Token Dashboard &#xff08;僅包括以太坊數據&#xff09; 在加密貨幣和數字資產領域&#xff0c;代幣分析起著至關重要的作用。代幣分析指的是深入研究與代幣…

springmvc基于springboot 的音樂播放系統 _7sdu8

這就意味著音樂播放系統的設計可以比其他系統更為出色的能力&#xff0c;可以更高效的完成最新的ymj排行榜、ymj音樂資訊等功能。 此系統設計主要采用的是JAVA語言來進行開發&#xff0c;JSP技術、采用SSM框架技術&#xff0c;框架分為三層&#xff0c;分別是控制層Controller&…

Seata的 TCC 模式

目錄 概述 使用 依賴與配置 代碼 概述 TCC 模式是一種侵入式的分布式事務解決方案&#xff0c;它不依賴于數據庫的事務&#xff0c;而是要求開發者自定義完成 預提交、提交、回滾的方法邏輯。因此&#xff0c;它是一個種偏 復雜、靈活、有侵入性 的分布式事務處理方案。 De…

針對Umi、React中遇到的 “xxxx”不能用作 JSX 組件 問題解決方案

一、處理方案 這是因為"types/react"、"types/react-dom"在子依賴中使用的版本不一致導致&#xff0c;一般情況npm會自動幫我們處理版本不一致的問題。如果npm處理不了&#xff0c;就需要我們自己手動處理在package.json中添加一項配置 {name:"test&…

Zookeeper選舉Leader源碼剖析

Zookeeper選舉Leader源碼剖析 leader選舉流程 參數說明 myid: 節點的唯一標識&#xff0c;手動設置zxid: 當前節點中最大(新)的事務idepoch-logic-clock: 同一輪投票過程中的邏輯時鐘值相同&#xff0c;每投完一次值會增加 leader選舉流程 默認投票給自己&#xff0c;優先選擇…

vue3 vuex

目錄 Vuex 是什么 什么是“狀態管理模式”&#xff1f; 什么情況下我應該使用 Vuex&#xff1f; 使用方法&#xff1a; 提交載荷&#xff08;Payload&#xff09; 對象風格的提交方式 使用常量替代 Mutation 事件類型 Mutation 必須是同步函數 在組件中提交 Mutation …

redis GEO 類型原理及命令詳解

目錄 前言 一、GeoHash 的編碼方法 二、Redis 操作GEO類型 前言 我們有一個需求是用戶搜索附近的店鋪&#xff0c;就是所謂的位置信息服務&#xff08;Location-Based Service&#xff0c;LBS&#xff09;的應用。這樣的相關服務我們每天都在接觸&#xff0c;用滴滴打車&am…

使用ENV工具編譯RT-Thread【詳細過程講解:從下載到編譯、設置】

感興趣的寶子&#xff0c;可以點個贊收藏&#xff0c;便于后期有需要的時候能快速找到~~ ENV編譯編譯RT-Thread工程的詳細過程講解 ENV簡介ENV的下載設置ENV使用ENV編譯RT-Thread工程◆ 打開ENV◆ 輸入打包命令◆ 查看并打開工程文件◆ 使用menuconfig 對生成項目的RT-Thread配…

【Git企業實戰開發】Git常用開發流操作總結

【Git企業實戰開發】Git常用開發流操作總結 大家好 我是寸鐵&#x1f44a; 總結了一篇Git常用開發流操作總結的文章? 喜歡的小伙伴可以點點關注 &#x1f49d; 現在剛做項目的伙伴&#xff0c;可能你之前學過git&#xff0c;但是一實戰發現不熟悉 沒關系&#xff0c;看寸鐵這篇…

fastadmin引用 redis 方法2

頁面上引用 use \think\cache\driver\Redis; $redis new Redis();$redis->set(key, value);// 獲取鍵值對的值$value $redis->get(key);echo $value;如果執行后出現 不支持redis&#xff0c; 檢查系統是否開啟 redis 擴展。 如果是小皮系統。 項目-管理-php擴展&#x…

js實現頂部導航欄隨著滾動條下滑顯示背景顏色,上劃到頂部背景顏色消失

有個項目需求&#xff0c;如題目所示。這種展示方式讓首頁的內容可以完美展示而不受到導航欄的干擾&#xff0c;等下滑查看內容時導航欄的背景顏色再顯示出來。下面是一個案例&#xff1a; 導航欄隨滑動條下滑顯示 再下面是我的成果視頻展示&#xff1a; 導航條隨滾動條下滑顯示…

vue怎么實現pdf、excel、word文件離線預覽?2024年2月份最新測試(可行方案和詳細代碼在文章末尾)

Vue.js 中實現Office文檔(Word、Excel、PPT)和PDF文件的預覽,通常會借助于第三方庫或服務。 1. Office文檔在線預覽 使用WPS Web Office SDK WPS提供了Web Office服務,可以將文檔轉換為網頁格式進行在線預覽。首先在項目中引入并注冊WPS提供的SDK,然后在Vue組件中配置一個…

一、平滑發布與灰度發布

目錄 一、平滑發布與灰度發布 一、平滑發布與灰度發布 什么叫平滑&#xff1a;在發布的過程中不影響用戶的使用&#xff0c;系統不會因發布而暫停對外服務&#xff0c;不會造成用戶短暫性無法訪問&#xff1b; 什么叫灰度&#xff1a;發布后讓部分用戶使用新版本&#xff0c;…

【Linux】普通用戶sudo失敗怎么辦

普通用戶&#xff0c;sudo失敗報錯怎么辦 問題分析如何解決成功 問題分析 新建的普通用戶sudo失敗 sudo提權&#xff0c;是以root的身份執行命令。 當我們用sudo提升權限的時候&#xff0c;這里有個問題&#xff0c;Linux會提示我們輸入當前普通用戶的密碼——這就有點不好。…

【Linux取經路】基礎I/O之重定向的實現原理

文章目錄 一、再來理解重定向1.1 輸出重定向效果演示1.2 重定向的原理1.3 dup21.4 輸入重定向效果演示1.5 輸入重定向代碼實現 二、再來理解標準輸出和標準錯誤2.1 同時對標準輸出和標準錯誤進行重定向2.2 將標準輸出和標準錯誤重定向到同一個文件 三、再看一切皆文件四、結語 …