存储过程
存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理, 存储过程存储在数据库内,可以由应用程序调用执行,而且允许用户声明变量,以及进行流程控制, 存储过程可以接收参数,可以接收输入类型的参数,也可以接收输出类型的参数, 并且可以存在多个返回值,存储过程的效率比一般SQL执行的效率要高
存储过程的优点
1.增强SQL语句的功能和灵活性 2.实现较快的执行速度 3.减少网络流量
--创建存储过程CREATE [DEFINER = { user|CURRENT_USER }]PROCEDURE sp_name ([proc_parameter[,...]])[characteristic ...] routine_body;--调用存储过程CALL sp_name([parameter[,...]]);CALL sp_name[()];--修改存储过程(能修改的内容十分有限,尤其是无法修改过程体)ALTER PROCEDURE sp_name [characteristic ...];--删除存储过程(若是修改过程体,可直接删除存储过程,再重建)DROP PROCEDURE [IF EXISTS] sp_name;--proc_parameter: [IN|OUT|INOUT] param_name type/*IN:表示该参数的值必须在调用存储过程时指定;OUT:表示该参数的值可以被存储过程改变,并且可以返回;INOUT:跟 OUT 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 INOUT 参数传递值给存储过程;*/--characteristic:特性COMMENT 'string'|{CONTAINS SQL | NO SQL | READS SQL DATA |MODIFIES SQL DATA}|SQL SECURITY {DEFINER | INVOKER}/*COMMENT:注释CONTAINS SQL:包含SQL语句,但不包含读或写数据的语句NO SQL:不包含SQL语句READS SQL DATA:包含读数据的语句MODIFIES SQL DATA:包含写数据的语句SQL SECURITY {DEFINER | INVOKER}:指明谁有权限来执行*/--过程体/*1.过程体由合法的SQL语句构成;2.过程体可以是‘任意’SQL语句(不能创建数据库,不能创建数据表,主要是对于数据的增删改查,以及多表连接等等);3.过程体如果为复合结构则使用BEGIN...END语句;4.复合结构可以包含声明,循环,控制结构;*/1.用户变量:以”@”开始,形式为”@变量名” 用户变量跟MySQL客户端是绑定的,设置的变量,只对当前用户使用的客户端生效 2.全局变量:定义示例,SET @i = 7;对所有客户端生效。只有具有super权限才可以设置全局变量 3.会话变量:只对连接的客户端有效。 4.局部变量:作用范围在 BEGIN 到 END 语句块之间。在该语句块里设置的变量 DECLARE语句专门用于定义局部变量。SET语句是设置不同类型的变量,包括会话变量和全局变量
新闻热点
疑难解答