存储过程和视图与函数的对比
存储过程可以直接操作底层数据表,视图是虚拟表,存储过程一旦创建出来,我们直接通过存储过程名调用就可以了,就像用函数一样,相对于函数,存储过程是没有返回值的
接下来看看存储过程的分类,现在不懂没关系,等文章后面内容看完再回过来看,其实分类和函数的分类差不多,就是根据有无参数和有无返回值来划分。
IN,OUT,INOUT都可以在一个存储过程中带多个
CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...) [characteristics ...] BEGIN 存储过程体 END
类似于Java的语法
修饰符 返回类型 方法名(参数类型 参数名,...){ 方法体; }
接下来对参数类型前面的IN,OUT,INOUT进行说明
characteristics表示创建存储过程时指定的对存储过程的约束条件,其取值信息如下:
LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string'
需要注意的地方:
DELIMITER $ CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...) [characteristics ...] BEGIN sql语句1; sql语句2; END $
准备工作
-- 准备工作,创建新数据库 create database db15; use db15; create table emps as select * from atguigudb.employees; create table departments as select * from atguigudb.departments; select * from emps;
无参无返回
存储过程的调用,用call+存储过程名
OUT类型
IN类型
带IN和OUT
带INOUT
CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回值类型 [characteristics ...] BEGIN 函数体 #函数体中肯定有 RETURN 语句 END
说明:
1、参数列表:指定参数为IN、OUT或INOUT只对PROCEDURE是合法的,FUNCTION中总是默认为IN参数。
2、RETURNS type 语句表示函数返回数据的类型;
RETURNS子句只能对FUNCTION做指定,对函数而言这是强制
的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value
语句。
3、characteristic 创建函数时指定的对函数的约束。取值与创建存储过程时相同,这里不再赘述。
4、函数体也可以用BEGIN…END来表示SQL代码的开始和结束。如果函数体只有一条语句,也可以省略BEGIN…END。
SELECT 函数名(实参列表)
注意:
若在创建存储函数中报错“you might want to use the less safe log_bin_trust_function_creators variable
”,有两种处理方法:
方式1:加上必要的函数特性“[NOT] DETERMINISTIC”和“{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}”
方式2:
SET GLOBAL log_bin_trust_function_creators = 1;
此外,存储函数可以放在查询语句中使用,存储过程不行。反之,存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。
到此这篇关于关于MySQL的存储过程与存储函数的文章就介绍到这了,更多相关MySQL存储过程与存储函数内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关文章: