mysql存儲過程與函數(shù)學(xué)習(xí)與實(shí)踐方式
什么是存儲過程?
存儲過程是一個(gè)預(yù)編譯的SQL語句,
優(yōu)點(diǎn)是允許模塊化的設(shè)計(jì),就是說只需要?jiǎng)?chuàng)建一次,以后在該程序中就可以調(diào)用多次。
如果某次操作需要執(zhí)行多次SQL,使用存儲過程比單純SQL語句執(zhí)行要快。
其實(shí)就是跟編程語言一樣,編寫一個(gè)方法,然后可以進(jìn)行復(fù)用的意思,例如可以編寫一個(gè)根據(jù)名字查詢學(xué)生數(shù)據(jù)的方法,然后就不需要每次都去寫了,使用的時(shí)候也方便很多
有哪些優(yōu)缺點(diǎn)?
優(yōu)點(diǎn)
- 1)存儲過程是預(yù)編譯過的,執(zhí)行效率高。
- 2)存儲過程的代碼直接存放于數(shù)據(jù)庫中,通過存儲過程名直接調(diào)用,減少網(wǎng)絡(luò)通訊。
- 3)安全性高,執(zhí)行存儲過程需要有一定權(quán)限的用戶。
- 4)存儲過程可以重復(fù)使用,減少數(shù)據(jù)庫開發(fā)人員的工作量。
缺點(diǎn)
- 1)調(diào)試麻煩,但是用 PL/SQL Developer 調(diào)試很方便!彌補(bǔ)這個(gè)缺點(diǎn)。
- 2)移植問題,數(shù)據(jù)庫端代碼當(dāng)然是與數(shù)據(jù)庫相關(guān)的。但是如果是做工程型項(xiàng)目,基本不存在移植問題。
- 3)重新編譯問題,因?yàn)楹蠖舜a是運(yùn)行前編譯的,如果帶有引用關(guān)系的對象發(fā)生改變時(shí),受影響的存儲過程、包將需要重新編譯(不過也可以設(shè)置成運(yùn)行時(shí)刻自動編譯)。
- 4)如果在一個(gè)程序系統(tǒng)中大量的使用存儲過程,到程序交付使用的時(shí)候隨著用戶需求的增加會導(dǎo)致數(shù)據(jù)結(jié)構(gòu)的變化,接著就是系統(tǒng)的相關(guān)問題了,最后如果用戶想維護(hù)該系統(tǒng)可以說是很難很難、而且代價(jià)是空前的,維護(hù)起來更麻煩。
關(guān)鍵語法
聲明語句結(jié)束符,可以自定義: DELIMITER $$ 或 DELIMITER // 聲明存儲過程: CREATE PROCEDURE demo_in_parameter(IN p_in int) 存儲過程開始和結(jié)束符號: BEGIN .... END 變量賦值: SET @p_in=1 變量定義: DECLARE l_int int unsigned default 4000000; 創(chuàng)建mysql存儲過程、存儲函數(shù): create procedure 存儲過程名(參數(shù)) 存儲過程體: create function 存儲函數(shù)名(參數(shù))
使用案例
創(chuàng)建一個(gè)存儲過程,可以根據(jù)學(xué)生的名字去查詢學(xué)生的數(shù)據(jù)
1、創(chuàng)建表
CREATE TABLE `student` ( `id` varchar(64) NOT NULL, `name` varchar(255) DEFAULT NULL, `class_id` varchar(64) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、創(chuàng)建存儲過程|函數(shù)
# 函數(shù)定義開頭 delimiter $$ # create procedure 函數(shù)名(in|out|input 參數(shù)名 參數(shù)類型) # 參數(shù)類型 如果是varchar的話要表明長度,如果是int的話就不需要 create procedure select_student(in s_name varchar(32)) # begin和end之前寫sql語句 begin select * from student s where s.name=s_name; end # 使用$$代表函數(shù)結(jié)束 $$
3、測試
# 先插入數(shù)據(jù) insert into student(id,name,class_id) values(1,"walker","11") # 設(shè)置變量,調(diào)用函數(shù) set @s_name="walker"; call select_student(@s_name)
4、查詢結(jié)果
1 walker 11
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql 導(dǎo)出select語句結(jié)果到excel文件遇到問題及解決方法
這篇文章主要介紹了mysql 導(dǎo)出select語句結(jié)果到excel文件遇到問題及解決方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09CentOS6.9下mysql 5.7.17安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了CentOS6.9下mysql 5.7.17安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10linux服務(wù)器清空MySQL的history歷史記錄 刪除mysql操作記錄
mysql歷史記錄上可能留下了很多敏感信息,比如密碼什么的,需及時(shí)清空歷史記錄,下面分享一下inux服務(wù)器清空MySQL的history歷史記錄的方法2014-01-01