表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



在开始时测试的循环。


 

一.创建存储过程

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


申明

非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

博文欢迎转载,但请给出原文连接。