MySQL之存储过程和函数

1.存储过程和函数

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

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

  • 创建,修改
create procedure sp_name([proc_parameter[,...]])
[characteristic ...] routine_body

create function sp_name([func_parameter[,...]])
returns type
[characteristic ...]routine_body
proc_parameter:
[IN\OUT\INOUT] param_name type

func_parameter:
param_name type

type: 
    any valid mysql data type
characteristic:
    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 statements
alter {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 data
begin
    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 ;//将结束符改回 ”;“

你可能感兴趣的:(存储过程,数据库,mysql,函数)