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