表A
声明 | 描述 |
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() 2.参数传递 二.调用存储过程 1.基本语法:call sp_name() 三.删除存储过程 1.基本语法: 四.区块,条件,循环 1.区块定义,常用 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 |
存储过程创建语法:
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则表示更新前的原值