MySQL之存储过程和函数

来源:互联网 发布:免费机械制图软件 编辑:程序博客网 时间:2024/06/17 05:16

1.存储过程和函数

存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理效率很有好处。
函数: 必须有返回值,参数只能是IN类型的
存储函数:没有返回值,参数可以使用IN,OUT,INOUT类型
如果有函数从其他类型的数据库迁移到MySQL,那么就可能因此需要将函数改造成存储过程。

2.存储过程和函数的相关操作

  • 创建,修改
create procedure sp_name([proc_parameter[,...]])[characteristic ...] routine_bodycreate function sp_name([func_parameter[,...]])returns type[characteristic ...]routine_bodyproc_parameter:[IN\OUT\INOUT] param_name typefunc_parameter:param_name typetype:     any valid mysql data typecharacteristic:    language sql    |[not] deterministic    |{contains sql| not sql |reads sql data|modifies sql data}    |sql security{definer|invoker}    |comment 'string'routine_body:    valid sql procedure statement or statementsalter {procedure|function} sp_name[characteristic ...]characteristic:{contains sql|no sql | reads sql data| modifies sql data}|sql security {definer|invoker}|comment 'string'
//调用过程call sp_name([parameter[,...]])

MySQL的存储过程和函数中允许包含DDL语句,也允许在存储过程中执行提交(Commit,确认之前的修改)或者回滚(Rollback,即放弃之前的修改),但是存储过程和函数中不允许执行load data infile语句,此外,存储过程和函数中可以调用其他的过程或者函数。

//创建一个新过程delimiter $$ //将结束符改为”$$“create procedure film_in_stock( IN p_film_id int,IN p_store_id int,out p_film_count int)reads sql databegin    select inventory_id    from inventory    where film_id = p_film_id    and store_id = p_store_id    and inventory_in_stock(inventory_id);select found_rows() into p_film_count;end $$Query OK,0 rows affected(0.00sec)delimiter ;//将结束符改回 ”;“
0 0
原创粉丝点击