MySQL 存储过程学习笔记
来源:互联网 发布:淘宝发布产品教程 编辑:程序博客网 时间:2024/05/17 09:46
存储过程创建语法:
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
[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 ]
语句体
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;
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
{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
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.参数传递begin
.........
end
二.调用存储过程
1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递
三.删除存储过程
1.基本语法:
drop procedure sp_name//
2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
drop procedure sp_name//
2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
四.区块,条件,循环
1.区块定义,常用
begin
......
end;
也可以给区块起别名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出区块,执行区块以后的代码
2.条件语句
begin
......
end;
也可以给区块起别名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出区块,执行区块以后的代码
2.条件语句
if 条件 then
statement
else
statement
end if;
statement
else
statement
end if;
3.循环语句
(1).while循环
[label:] WHILE expression DO
statements
END WHILE [label] ;
statements
END WHILE [label] ;
(2).loop循环
[label:] LOOP
statements
END LOOP [label];
statements
END LOOP [label];
(3).repeat until循环
[label:] REPEAT
statements
UNTIL expression
END REPEAT [label] ;
statements
UNTIL expression
END REPEAT [label] ;
- MySQL 存储过程学习笔记
- MySQL存储过程学习笔记
- MySQL存储过程学习笔记
- MySql存储过程学习笔记
- MySQL存储过程学习笔记
- mysql学习笔记:存储过程
- Mysql存储过程学习笔记
- mysql学习笔记:存储过程
- MySQL存储过程学习笔记
- 学习笔记:mysql存储过程
- Mysql 存储过程学习笔记
- MySQL存储过程学习笔记
- [学习笔记]MySql存储过程学习一
- [学习笔记]MySql存储过程学习二
- [学习笔记]MySql存储过程学习三
- [学习笔记]MySql存储过程学习四
- mysql存储过程学习笔记--错误处理
- mysql存储过程学习笔记--常用函数
- GoogleGmail
- 无题
- MySQL 分页存储过程
- 笔试收录---百度[软件工程师]
- 猜数游戏程序
- MySQL 存储过程学习笔记
- asp.net控件开发系列(九)
- 计算每个单词的平均长度
- 开博啦
- DateTime类常用技巧
- Linux下编译MySQLdb遇到的问题
- RVDS与MDK-ARM比较
- 在ofbiz 的类:org.ofbiz.base.start.Classpath中发现对一个类路径字符串拼接的错误
- DXperience demo编译工具