MySQL 存储过程学习笔记

存储过程创建语法:

CREATE PROCEDURE procedure_name( [ parameter[,... ] )

[ LANGUAGESQL ]

[ [NOT ] DETERMINISTIC]

[ {CONTAINSSQL|MODIFIESSQLDATA|READSSQLDATA|NOSQL} ]

[ SQLSECURITY{DEFINER|INVOKER} ]

[ COMMENTcomment_string ]

procedure_statements

函数的创建

CREATE FUNCTION function_name(parameter [ ,... ] )

RETURNS datatype

[ LANGUAGESQL ]

[ [NOT ] DETERMINISTIC]

[ {CONTAINSSQL|NOSQL|MODIFIESSQLDATA|READSSQLDATA} ]

[ SQLSECURITY{DEFINER|INVOKER} ]

[ COMMENTcomment_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 ' ;
ELSEIFin_status
= ' U ' THEN SET long_status = ' Uptodate ' ;
ELSEIFin_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 EACHROW

trigger_statements

意义:
当对表table_name执行update,insert,delete操作之前(before)或之后(after)时触发语句trigger_statements操作

例:

mysql > CREATE TRIGGER account_balance_au
AFTER
UPDATE ON account_balance FOR EACHROW
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,NoSQL)