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則表示更新前的原值