美文网首页@future
MySQL的最终学习,收官阶段

MySQL的最终学习,收官阶段

作者: 月初yue | 来源:发表于2023-11-16 09:31 被阅读0次

    这周主要学的是mysql 的一些运行机制,还有一些帮助查询的功能

    存储过程和函数介绍:

    存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合

    存储过程和函数的好处

    提高代码的复用性

    减少数据在数据库和应用服务器之间的传输,提高效率

    减少代码层面的业务处理

    存储过程和函数的区别

    存储函数必须有返回值

    存储过程可以没有返回值

    存储过程的创建:

    创建存储过程

    -- 修改分隔符为$

    DELIMITER $

    -- 标准语法

    CREATE PROCEDURE 存储过程名称(参数列表)

    BEGIN

    SQL 语句列表;

    END$

    -- 修改分隔符为分号

    DELIMITER ;

    */

    -- 创建stu_group()存储过程,封装 分组查询总成绩,并按照总成绩升序排序的功能

    DELIMITER $

    CREATE PROCEDURE stu_group()

    BEGIN

    SELECT gender,SUM(score) getSum FROM student GROUP BY gender ORDER BY getSum ASC;

    END$

    DELIMITER ;

    /*

    调用存储过程

    CALL 存储过程名称(实际参数);

    */

    -- 调用stu_group()存储过程

    CALL stu_group();

    -- 查询存储过程

    SELECT *FROM mysql.proc WHERE db='表名';

    -- 删除存储过程

    DROP PROCEDURE IF EXISTS stu_group;

    存储函数:

    /*

    创建存储函数

    CREATE FUNCTION 函数名称([参数 数据类型])

    RETURNS 返回值类型

    BEGIN

    执行的sql语句;

    RETURN 结果;

    END$

    */

    -- 定义存储函数,获取学生表中成绩大于95分的学生数量

    DELIMITER $

    CREATE FUNCTION fun_test1()

    RETURNS INT

    BEGIN

    -- 定义变量

    DECLARE s_count INT;

    -- 查询成绩大于95分的数量,为s_count赋值

    SELECT COUNT(*) INTO s_count FROM student WHERE score > 95;

    -- 返回统计结果

    RETURN s_count;

    END$

    DELIMITER ;

    /*

    调用函数

    SELECT 函数名称(实际参数);

    */

    -- 调用函数

    SELECT fun_test1();

    /*

    删除函数

    DROP FUNCTION 函数名称;

    */

    -- 删除函数

    DROP FUNCTION fun_test1;

    学完这些存储函数,还紧接着学习了什么事触发器,这个就相对来说抽象且高级一点了

    触发器(自动日志备份):

    触发器是与表有关的数据库对象,可以在insert,update,delete之前或之后触发并执行触发器中定义的SQL语句.

    这种特性可以协助应用系统在数据库端确保数据的完整性·日志记录,数据校验等操作

    使用别名NEW和OLD来引用触发器中发生变化的内容记录。

    触发器的创建:

    -- 创建INSERT型触发器。用于对account表新增数据进行日志的记录

    DELIMITER $

    CREATE TRIGGER account_insert

    AFTER INSERT

    ON account

    FOR EACH ROW

    BEGIN

    INSERT INTO account_log VALUES (NULL,'INSERT',NOW(),new.id,CONCAT('插入后{id=',new.id,',name=',new.name,',money=',new.money,'}'));

    END$

    DELIMITER ;

    -- 向account表添加一条记录

    INSERT INTO account VALUES (NULL,'王五',2000);

    -- 查询account表

    SELECT * FROM account;

    -- 查询account_log表

    SELECT * FROM account_log;

    /*

    创建触发器

    DELIMITER $

    CREATE TRIGGER 触发器名称

    BEFORE|AFTER INSERT|UPDATE|DELETE

    ON 表名

    FOR EACH ROW

    BEGIN

    触发器要执行的功能;

    END$

    DELIMITER ;

    */

    -- 创建UPDATE型触发器。用于对account表修改数据进行日志的记录

    DELIMITER $

    CREATE TRIGGER account_update

    AFTER UPDATE

    ON account

    FOR EACH ROW

    BEGIN

    INSERT INTO account_log VALUES (NULL,'UPDATE',NOW(),new.id,CONCAT('更新前{id=',old.id,',name=',old.name,',money=',old.money,'}','更新后{id=',new.id,',name=',new.name,',money=',new.money,'}'));

    END$

    DELIMITER;

    -- 修改account表中李四的金额为2000

    UPDATE account SET money=2000 WHERE id=2;

    -- 查询account表

    SELECT * FROM account;

    -- 查询account_log表

    SELECT * FROM account_log;

    /*

    创建触发器

    DELIMITER $

    CREATE TRIGGER 触发器名称

    BEFORE|AFTER INSERT|UPDATE|DELETE

    ON 表名

    FOR EACH ROW

    BEGIN

    触发器要执行的功能;

    END$

    DELIMITER ;

    */

    -- 创建DELETE型触发器。用于对account表删除数据进行日志的记录

    DELIMITER $

    CREATE TRIGGER account_delete

    AFTER DELETE

    ON account

    FOR EACH ROW

    BEGIN

    INSERT INTO account_log VALUES (NULL,'DELETE',NOW(),old.id,CONCAT('删除前{id=',old.id,',name=',old.name,',money=',old.money,'}'));

    END$

    DELIMITER;

    -- 删除account表中王五

    DELETE FROM account WHERE id=3;

    -- 查询account表

    SELECT * FROM account;

    -- 查询account_log表

    SELECT * FROM account_log;

    -- 查看和删除触发器

    -- 查看触发器

    SHOW TRIGGERS;

    -- 删除触发器

    DROP TRIGGER account_delete;

    相关文章

      网友评论

        本文标题:MySQL的最终学习,收官阶段

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