美文网首页数据库学习
2023-11-15第15章_存储过程与函数

2023-11-15第15章_存储过程与函数

作者: 大也 | 来源:发表于2023-11-18 00:10 被阅读0次

-- ---------------------- 存储过程
-- ---------------------- 函数
-- ---------------------- 查看修改删除
-- ---------------------- 异常 小结 和 经典白学

-- ---------------------- 存储过程
DELIMITER // -- 结束符替换 DELIMITER
CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)
LANGUAGE SQL -- 说明存储过程执行体是由SQL语句组成的
[NOT] DETERMINISTIC -- 指明存储过程执行的结果是否确定( 每次执行存储过程时,相同的输入会得到相同的输出。)
-- 默认为NOT DETERMINISTIC。
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
-- CONTAINS 不包含读写数据的SQL语句
-- NO 不包含任何SQL语句;
-- READS 读
-- MODIFIES 写
SQL SECURITY { DEFINER | INVOKER }
-- DEFINER 创建者或者定义者才能执行当前存储过程;
-- INVOKER 拥有当前存储过程的访问权限的用户能够执行当前存储过程。
COMMENT 'string' -- COMMENT 存储方式注释
BEGIN -- BEGIN...END 结构体 结束符;
DECLARE i INT DEFAULT 1; -- DECLARE 声明变量 局部
SET i = 0; -- SET 赋值语句,用于对变量进行赋值。
SELECT... INTO ... FROM ... -- SELECT... INTO 放出参 OUT
WHERE ...GROUP BY ...HAVING... ORDER BY...LIMIT

END//
DELIMITER ;

调用
SET @inname=值; SET @outname; -- 入参 IN 出参 OUT
CALL sp1(@inname,@outname); -- CALL 存储过程名
SELECT @inname; SELECT @outname; -- 查询 入参 出参

-- ---------------------- 函数
如何调试/语法分析/函数. RETURNS!!!!!

DELIMITER // -- 结束符替换 DELIMITER
CREATE FUNCTION 函数名(参数名 参数类型,...) -- 不需要 IN OUT
RETURNS 返回值类型 -- RETURNS 注意 返回值
LANGUAGE SQL -- 说明存储过程执行体是由SQL语句组成的
[NOT] DETERMINISTIC -- 指明存储过程执行的结果是否确定( 每次执行存储过程时,相同的输入会得到相同的输出。)
-- 默认为NOT DETERMINISTIC。
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
-- CONTAINS 不包含读写数据的SQL语句
-- NO 不包含任何SQL语句;
-- READS 读
-- MODIFIES 写
SQL SECURITY { DEFINER | INVOKER }
-- DEFINER 创建者或者定义者才能执行当前存储过程;
-- INVOKER 拥有当前存储过程的访问权限的用户能够执行当前存储过程。
COMMENT 'string' -- COMMENT 存储方式注释
BEGIN

DECLARE i INT DEFAULT 1;                                -- DECLARE 声明变量 局部
SET i = 0;                              -- SET 赋值语句,用于对变量进行赋值。
SELECT ... FROM ...             --  不包含 SELECT 。。。 INTO 
WHERE ...GROUP BY ...HAVING... ORDER BY...LIMIT
RETURN (
        SELECT i                            -- 一定包含 RETURN 只有计算可以直接 SELECT 
    );

END //
DELIMITER ;

-- ---------------------- 查看修改删除
使用SHOW CREATE语句查看存储过程和函数的创建信息
SHOW CREATE {PROCEDURE | FUNCTION} 存储过程名或函数名
SHOW CREATE FUNCTION test_db.CountProc \G
使用SHOW STATUS语句查看存储过程和函数的状态信息
SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']
SHOW PROCEDURE STATUS LIKE 'SELECT%' \G
从information_schema.Routines表中查看存储过程和函数的信息
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='存储过程或函数的名' [AND ROUTINE_TYPE = {'PROCEDURE|FUNCTION'}];

修改
ALTER {PROCEDURE | FUNCTION} 存储过程或函数的名 [characteristic ...]
[characteristic ...]:
LANGUAGE SQL -- 说明存储过程执行体是由SQL语句组成的
[NOT] DETERMINISTIC -- 指明存储过程执行的结果是否确定( 每次执行存储过程时,相同的输入会得到相同的输出。)
-- 默认为NOT DETERMINISTIC。
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
-- CONTAINS 不包含读写数据的SQL语句
-- NO 不包含任何SQL语句;
-- READS 读
-- MODIFIES 写
SQL SECURITY { DEFINER | INVOKER }
-- DEFINER 创建者或者定义者才能执行当前存储过程;
-- INVOKER 拥有当前存储过程的访问权限的用户能够执行当前存储过程。
COMMENT 'string' -- COMMENT 存储方式注释

删除
DROP {PROCEDURE | FUNCTION} [IF EXISTS] 存储过程或函数的名

-- ---------------------- 异常 小结 和 经典白学
1.若在创建存储函数中报错“
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;

2.存储函数可以放在查询语句中使用,存储过程不行

3.经典白学
1、可移植性差。存储过程不能跨数据库移植,比如在 MySQL、Oracle 和 SQL Server 里编写的存储过 程,在换成其他数据库时都需要重新编写。
2、调试困难。只有少数 DBMS 支持存储过程的调试。对于复杂的存储过程来说,开发和维护都不容 易。虽然也有一些第三方工具可以对存储过程进行调试,但要收费。
3、存储过程的版本管理很困难。 比如数据表索引发生变化了,可能会导致存储过程失效。我们在开发 软件的时候往往需要进行版本管理,但是存储过程本身没有版本控制,版本迭代更新的时候很麻烦。
4、它不适合高并发的场景。 高并发的场景需要减少数据库的压力,有时数据库会采用分库分表的方 式,
而且对可扩展性要求很高,在这种情况下,存储过程会变得难以维护, 增加数据库的压力 ,显然就 不适用了。

相关文章

  • 存储过程与函数

    存储过程与函数存储过程的定义存储过程的创建存储过程的操作自定义函数 存储过程与函数 存储过程的定义 运行效率高 降...

  • 存储过程与存储函数

    根据慕课网课程Oracle存储过程和自定义函数整理 1.概念 (1)定义:存储在数据库中供所有用户程序调用的子程序...

  • 存储过程与存储函数

    存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存...

  • 存储过程与函数

    1、存储过程和函数类似于java中的方法,是一组预先编译好的SQL语句的集合。 2、区别: 3、存储过程的优点:

  • 函数与存储过程

    MYSQL常用函数 聚焦函数1.avg2.count3.max4.min5.sum 字符串函数1.concat(s...

  • MySQL语法模板 SQL语句:函数、存储过程

    创建函数 创建存储过程 修改函数 修改存储过程 调用 删除函数 删除存储过程

  • 17 存储过程

    过程: 函数: 过程是没有返回值的函数 存储过程: 存储过程语法 存储过程1--创建简单的存储过程 存储过程2--...

  • MySQL 存储过程与函数

    触发器,函数,存储过程 1 存储过程与函数的区别 本质上没区别,执行的本质都一样。 函数有且只能返回一个变量存储过...

  • mysql函数与存储过程

    函数不能写select查询 存储过程可以

  • SQL函数与存储过程

    存储过程(Stored Procedure)是一种在数据库中将SQL语言的代码封装,以便外部程序调用的一种数据库对...

网友评论

    本文标题:2023-11-15第15章_存储过程与函数

    本文链接:https://www.haomeiwen.com/subject/gneuwdtx.html