-
CREATE PROCEDURE
建立一個存放在MySQL資料庫的表格的預存程序。
CREATE FUNCTION
建立一個使用者自訂的函數,尤其是傳回資料的預存程序。
ALTER PROCEDURE
變更以CREATE PROCEDURE 建立的預先指定的預存程序,其不會影響相關預存程序或儲存功能。 .
ALTER FUNCTION
變更以CREATE FUNCTION 建立的預先指定的預存程序,其不會影響相關預存程序或儲存功能。 .
DROP PROCEDURE
從MySQL的表格中刪除一個或多個預存程序。
DROP FUNCTION
從MySQL的表格中刪除一個或多個儲存函數。
SHOW CREATE PROCEDURE
傳回使用CREATE PROCEDURE 建立的預先指定的預存程序的文字。這項聲明是SQL:2003規範的一個MySQL擴充。
SHOW CREATE FUNCTION
傳回使用CREATE FUNCTION建立的預先指定的預存程序的文字。這項聲明是SQL:2003規範的一個MySQL擴充。
SHOW PROCEDURE STATUS
傳回一個預先指定的預存程序的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這項聲明是SQL:2003規範的一個MySQL擴充。
SHOW FUNCTION STATUS
傳回一個預先指定的儲存函數的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這項聲明是SQL:2003規範的一個MySQL擴充。
CALL
呼叫一個使用CREATE PROCEDURE建立的預先指定的預存程序。
BEGIN ... END
包含一組執行的多聲明。
DECLARE
用於指定當地變數、環境、處理器,以及指標。
SET
用於更改當地和全域伺服器變數的值。
SELECT ... INTO
用於儲存顯示變數的縱列。
OPEN
用於打開一個指針。
FETCH
使用特定指標來獲得下一列。
CLOSE
用於關閉和開啟指針。
IF
一個An if-then-else-end if 聲明。
CASE ... WHEN
一個case聲明的結構
LOOP
一個簡單的循環結構;可以使用LEAVE 語句來退出。
LEAVE
用於退出IF,CASE,LOOP,REPEAT以及WHILE 語句。
ITERATE
用於重新開始循環。
REPEAT
在結束時測試的循環。
WHILE
在開始時測試的循環。
RETURNS
傳回一個預存程序的值。
MySQL 5.0支援預存程序語句。
一.創建儲存過程
1.基本語法:
create procedure sp_name()
begin
....
end
2.參數傳遞
二.呼叫儲存過程
1.基本語法:call sp_name()
注意:預存程序名稱後面必須加括號,即使該預存程序沒有參數傳遞
三.刪除預存程序
1.基本語法:
drop procedure sp_name//
2.注意事項
(1)不能在一個預存程序中刪除另一個預存程序,只能呼叫另一個預存程序
四.區塊,條件,循環
1.區塊定義,常用
begin
.....
end;
也可以給區塊起別名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出區塊,執行區塊以後的程式碼
2.條件語句
if 條件then
statement
else
statement
end if;
3.循環語句
(1).while循環
[label:] WHILE expression DO
statements
END WHILE [label] ;
(2).loop循環
[label:] LOOP
statements
END LOOP [label];
(3).repeat until循環
[label:] REPEAT
statements
UNTIL expression
END REPEAT [label] ;
五.其他常用命令
1.show procedure status
顯示資料庫中所有儲存的儲存程序基本信息,包括所屬資料庫,預存程序名稱,建立時間等
2.show create procedure sp_name
預存程序建立語法:
CREATE PROCEDURE procedure_name ([parameter[,...])
[LANGUAGE SQL]
[ [NOT] DETERMINISTIC ]
[{CONTAINS SQL|MODIFIES SQL DATA|READS SQL DATA|NO SQL}]
[SQL SECURITY {DEFINER|INVOKER} ]
[COMMENT comment_string]
procedure_statements
可用SHOW PROCEDURE STATUS 或SHOW CREATE PROCEDURE 來查看存儲過程資訊另,系統表INFORMATION_SCHEMA.ROUTINES也包含了存儲過程的一些信息同樣地,函數也可以使用同樣方式查看(SHOW FUNCTION STATUS)
函數的創建
CREATE FUNCTION function_name (parameter[,...])
RETURNS datatype
[LANGUAGE SQL]
[ [NOT] DETERMINISTIC ]
[ {CONTAINS SQL | NO SQL | MODIFIES SQL DATA | READS SQL DATA} ]
[ SQL SECURITY {DEFINER|INVOKER} ]
[ COMMENT comment_string ]
語句體
函數與預存程序基本一樣,其差異主要有:
1、要使用RETURNS指定回傳類型
2、函數必須傳回值,且在語句體中使用RETURN回傳(注意:指定回傳型別用RETURNS,傳回值用RETURN)
3、 參數不區分IN,OUT,全部為IN類形
例:
CREATE FUNCTION cust_status(in_status CHAR(1))
RETURNS VARCHAR(20)
BEGIN DECLARE long_status VARCHAR(20);
IF in_status="O" THEN SET long_status="Overdue";
ELSEIF in_status="U" THEN SET long_status="Up to date";
ELSEIF in_status="N" THEN SET long_status="new";
END IF;
RETURN(long_status);
END;
調用:
SELECT cust_status('O');
觸發器
CREATE [DEFINER={user|CURRENT_USER}] TRIGGER trigger_name
{BEFORE|AFTER} {UPDATE|INSERT|DELETE}
ON table_name
FOR EACH ROW
trigger_statements
意義:當對錶table_name執行update,insert,delete操作之前(before)或之後(after)時觸發語句trigger_statements操作
例:
mysql> CREATE TRIGGER account_balance_au
AFTER UPDATE ON account_balance FOR EACH ROW
BEGIN
DECLARE dummy INT;
IF NEW.balance<0 THEN
SET NEW.balance=NULL;
END IF;
END
上述觸發器表示:當更新表account_balance之後,如果更新的值balance小於0,則將它改為NULL,
註:如果為OLD.balance則表示更新前的原值