• MySQL:存储过程与存储引擎


    目录

    存储过程

    函数与存储过程区别

    定义

    存储引擎


    存储过程

    存储过程是一个包括多条 SQL 语句的集合,专用于特定表的特定操作

    函数与存储过程区别

    函数是专用于进行数据处理,并将结果返回给调用者,它更多情况下是一条 SQL 语句的参与者,无法直接运行,并且不涉及某个特定表

    存储过程是多条 SQL 语句的执行者,这是它们的本质区别

    定义

    定义存储过程与定义函数极为相似,它也可以包含参数,函数中使用的语句这里也能使用,但是它没有返回值

    CREATE PROCEDURE test(`name` VARCHAR(20), pwd VARCHAR(20))

    BEGIN

      INSERT INTO users(username, `password`) VALUES(`name`, pwd);

    END

    可以在存储过程中编写多条 SQL 语句,但是注意,MySQL 的存储过程不具有原子性,当出现错误时,并不会回滚之前的操作,因此需要自己来编写事务保证原子性

    执行存储过程

    通过使用`call`来执行一个存储过程,如果存储过程有参数,那么还需要填写参数

    CALL test('zzp', '123456')

    使用游标来遍历一个SELECT语句查询的结果

    游标的使用步骤

    * DECLARE 游标名称 CURSOR FOR 查询结果   -  定义游标

    * declare (continue/exit) handler for 异常名称(ID) 做点什么

    * OPEN cur     -   开启游标

    * FETCH 游标名称 INTO 存储结果的变量    -    从顶部开始,每执行一次,向下移动,如果已经在最底部,则触发异常

    * CLOSE cur    -   关闭游标

    BEGIN

        DECLARE id INT;

        DECLARE `name` VARCHAR(10);

        DECLARE sex VARCHAR(5);

        DECLARE score INT;

        DECLARE a INT DEFAULT 0;

        DECLARE cur CURSOR FOR SELECT * FROM student;

        -- 必须在游标定义之后编写

        DECLARE CONTINUE HANDLER FOR 1329 SET a = 1;

        OPEN cur;

        WHILE a = 0 DO

            FETCH cur INTO id, `name`, sex, score;

            SELECT id, `name`, sex, score;

        END WHILE;

        CLOSE cur;

        SELECT 1;

    END

    限定存储过程的参数传递

    比如希望用户给一个参数用于接收数据,而不是值传递,可以将其设定为 OUT 类型

    CREATE PROCEDURE `lbwnb`(OUT a INT)

    BEGIN

        SET a = 100;

    END

    所有的参数默认为`IN`类型,也就是只能作为传入参数,无法为其赋值,而这里把参数设定为`OUT`类型,那么参数无法将值传入,而只能被赋值。如果既希望参数可以传入也可以被重新赋值,可以将其修改为`INOUT`类型。

    存储引擎

    存储引擎就像我们电脑中的 CPU,整个 MySQL 最核心的部分,数据库中的数据如何存储,数据库能够支持哪些功能,我们的增删改查请求如何执行,都是由存储引擎来决定的

    - MyISAM:MySQL5.5 之前的默认存储引擎,在插入和查询的情况下性能很高,但是它不支持事务,只能添加表级锁。

    - InnoDB:MySQL5.5 之后的默认存储引擎,它支持 ACID 事务、行级锁、外键,但是性能比不过 MyISAM,更加消耗资源。

    - Memory:数据都存放在内存中,数据库重启或发生崩溃,表中的数据都将消失。

    查看 MySQL 支持的存储引擎

    show engines;

    在创建表时,也可以为表指定其存储引擎 ,还可以在配置文件中修改默认的存储引擎

  • 相关阅读:
    【目标检测】Faster R-CNN论文代码复现过程解读(含源代码)
    knife4j-openapi3 无法使用swagger注解@ApiModelProperty
    ffmpeg命令分析-yuv封装mp4
    JVM基础02_类加载
    KingbaseES PL/SQL 过程语言参考手册(5. 控制语句)
    力扣(2024.06.12)
    [Unity3D]--更换天空盒子
    JMeter接口自动化发包与示例
    腻子粉用不好,会开裂,发霉
    c语言打印菱形图案
  • 原文地址:https://blog.csdn.net/weixin_51992178/article/details/127579691