上海網(wǎng)站建設(shè)定制公司谷歌推廣代理公司
目錄
1?存儲過程
1.1?創(chuàng)建存儲過程?
1.2?調(diào)用存儲過程
1.3?查看存儲過程
1.4 存儲過程的參數(shù)
1.5 修改存儲過程
1.6?刪除存儲過程
2?條件語句
3?循環(huán)語句
1?存儲過程
存儲過程是一組為了完成特定功能的SQL語句集合。
存儲過程在使用過程中是將常用或者復雜的工作預先使用SQL語句寫好并用一個指定的名稱存儲起來,這個過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務器中。當需要使用該存儲過程時,只需要調(diào)用它即可。存儲過程在執(zhí)行上比傳統(tǒng)SQL速度更快、執(zhí)行效率更高。
存儲過程的優(yōu)點:
1、執(zhí)行一次后,會將生成的二進制代碼駐留緩沖區(qū),提高執(zhí)行效率
2、SQL語句加上控制語句的集合,靈活性高
3、在服務器端存儲,客戶端調(diào)用時,降低網(wǎng)絡(luò)負載
4、可多次重復被調(diào)用,可隨時修改,不影響客戶端調(diào)用
5、可完成所有的數(shù)據(jù)庫操作,也可控制數(shù)據(jù)庫的信息訪問權(quán)限
1.1?創(chuàng)建存儲過程
DELIMITER $$ #將語句的結(jié)束符號從分號;臨時改為兩個$$(可以是自定義)
CREATE PROCEDURE Proc() #創(chuàng)建存儲過程,過程名為Proc,不帶參數(shù)
-> BEGIN #過程體以關(guān)鍵字 BEGIN 開始
-> select * from Store_Info; #過程體語句
-> END $$ #過程體以關(guān)鍵字 END 結(jié)束
DELIMITER ; #將語句的結(jié)束符號恢復為分號
實例
DELIMITER $$ #將語句的結(jié)束符號從分號;臨時改為兩個$$(可以自定義)
CREATE PROCEDURE Proc5() #創(chuàng)建存儲過程,過程名為Proc5,不帶參數(shù)
-> BEGIN #過程體以關(guān)鍵字 BEGIN 開始
-> create table user (id int (10), name char(10),score int (10));
-> insert into user values (1, 'cyw',70);
-> select * from cyw; #過程體語句
-> END $$ #過程體以關(guān)鍵字 END 結(jié)束
DELIMITER ; #將語句的結(jié)束符號恢復為分號
1.2?調(diào)用存儲過程
CALL Proc;
1.3?查看存儲過程
SHOW CREATE PROCEDURE [數(shù)據(jù)庫.]存儲過程名; #查看某個存儲過程的具體信息
SHOW CREATE PROCEDURE Proc;SHOW PROCEDURE STATUS [LIKE '%Proc%'] \G
1.4 存儲過程的參數(shù)
IN 輸入?yún)?shù):表示調(diào)用者向過程傳入值(傳入值可以是字面量或變量)
OUT 輸出參數(shù):表示過程向調(diào)用者傳出值(可以返回多個值)(傳出值只能是變量)
INOUT 輸入輸出參數(shù):既表示調(diào)用者向過程傳入值,又表示過程向調(diào)用者傳出值(值只能是變量)
DELIMITER $$
CREATE PROCEDURE Proc6(IN inname CHAR(16))
-> BEGIN
-> SELECT * FROM store_info WHERE Store_Name = inname;
-> END $$
DELIMITER ; CALL Proc6('Boston');
1.5 修改存儲過程
ALTER PROCEDURE <過程名>[<特征>... ]
ALTER PROCEDURE GetRole MODIFIES SQL DATA SQL SECURITY INVOKER;
MODIFIES sQLDATA:表明子程序包含寫數(shù)據(jù)的語句
SECURITY:安全等級
invoker:當定義為INVOKER時,只要執(zhí)行者有執(zhí)行權(quán)限,就可以成功執(zhí)行。
1.6?刪除存儲過程
存儲過程內(nèi)容的修改方法是通過刪除原有存儲過程,之后再以相同的名稱創(chuàng)建新的存儲過程。如果要修改存儲過程的名稱,可以先刪除原存儲過程,再以不同的命名創(chuàng)建新的存儲過程。
DROP PROCEDURE IF EXISTS Proc;
#僅當存在時刪除,不添加 IF EXISTS 時,如果指定的過程不存在,則產(chǎn)生一個錯誤
2?條件語句
if-then-else ···· end if
mysql> delimiter $$
mysql>
mysql> CREATE PROCEDURE proc8(IN pro int)-> -> begin-> -> declare var int; -> set var=pro*2;-> if var>=10 then -> update t set id=id+1;-> else-> update t set id=id-1;-> end if;-> end $$mysql> delimiter ;
3?循環(huán)語句
while ···· end while
mysql> delimiter $$
mysql>
mysql> create procedure proc9()-> begin -> declare var int(10); -> set var=0;-> while var<6 do -> insert into t values(var);-> set var=var+1;-> end while;-> end $$ mysql> delimiter ;