MySQL 存储过程学习笔记

存储过程创建语法:

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 

 

函数的创建

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 ' );

        可用SHOW PROCEDURE STATUS 或 SHOW CREATE PROCEDURE 来查看存储过程信息
另,系统表INFORMATION_SCHEMA.ROUTINES也包含了存储过程的一些信息
同样地,函数也可以使用同样方式查看(SHOW FUNCTION STATUS)

触发器

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

基本语法

一.创建存储过程

1.基本语法:
create procedure sp_name()
begin
.........
end
2.参数传递

二.调用存储过程

1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

三.删除存储过程

1.基本语法:
drop procedure sp_name//
2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

四.区块,条件,循环

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 ] ;
 

你可能感兴趣的:(MySQL 存储过程学习笔记)