MySQL小记——存储过程、触发器、函数、视图

这篇具有很好参考价值的文章主要介绍了MySQL小记——存储过程、触发器、函数、视图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

存储过程 procedure

语法

参数

调用存储过程 call

删除存储过程 drop

带有IF逻辑的存储过程 if then elseif else

带有循环的存储过程 while do

变量

触发器 Trigger

语法

old和new

视图 View

函数

自定义函数

内置函数


存储过程 procedure

存储过程是数据库中的一个对象,存储在服务端,用来封装多条SQL语句且带有逻辑性,可以实现一个功能,由于他在创建时,就已经对SQL进行了编译,所以执行效率高,而且可以重复调用,类似与我们Java中的方法。

语法

DELIMITER $$
CREATE
    PROCEDURE `performance_schema`.`myTestPro`()
  
    BEGIN
  
    END$$

DELIMITER ;

参数

in:输入参数
out:输出参数
inout:输入输出参数

例如:
DELIMITER $$

CREATE
    PROCEDURE `performance_schema`.`myTestPro`(IN num INT,OUT r INT)
    BEGIN
    DELETE FROM emp WHERE empno=num;
    SELECT COUNT(*) FROM emp INTO r;
    END$$

DELIMITER ;

调用存储过程 call

set @rr=0;   //会话变量

语法:call myTestPro(9527,@rr)
查询结果: select @r

删除存储过程 drop

drop procedure myTestPro;

带有IF逻辑的存储过程 if then elseif else

DELIMITER $$
CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))
BEGIN
    IF num=1 THEN
        SET str='星期一';
    ELSEIF num=2 THEN              -- 注意elseif  连在一块
        SET str='星期二';
    ELSEIF num=3 THEN
        SET str='星期三';             -- 注意要用分号结束
    ELSE
        SET str='输入错误';
    END IF;                        -- 注意要结束if  后面有分号
END $$

带有循环的存储过程 while do

DELIMITER $
CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
BEGIN
    -- 定义一个局部变量
    DECLARE i INT DEFAULT 1;
    DECLARE vsum INT DEFAULT 0;
    WHILE i<=num DO
          SET vsum = vsum+i;
          SET i=i+1;
    END WHILE;  -- 要记得结束循环
    SET result=vsum;
END $

变量

1.全局变量(内置变量)

 -- 查看所有全局变量: 
show variables

2.会话变量

只存在于当前客户端与数据库服务器端的一次连接当中。如果连接断开,那么会话变量全部丢失

 -- 定义会话变量: 
set @变量=值
-- 查看会话变量:
select @变量

3.局部变量

在存储过程中使用的变量就叫局部变量。只要存储过程执行完毕,局部变量就丢失

定义局部变量的语法:
DECLARE i INT DEFAULT 1;  
给变量设置值 set i=10;

触发器 Trigger

数据库中的一个对象,相当于JS中的监听器,触发器可以监听 增 删 改 三个动作,比如说我想监听一张表,只要我增删改了这张表中的数据,我就可以触发这个触发器,去往另外一张表中记录一下日志

语法

DELIMITER $$

CREATE
    TRIGGER `mytestdb`.`myTriger` BEFORE/AFTER INSERT/UPDATE/DELETE
    ON `mytestdb`.`<Table Name>`
    FOR EACH ROW 
    BEGIN
     
     
     
    END$$

DELIMITER ;

BEFORE 行为发生之前就触发

AFTER 行为发生之后触发
 FOR EACH ROW 行级触发,每操作一行就触发

例如:在test表中删除一条数据,在日志表logger中添加一条记录

DELIMITER $$

CREATE TRIGGER `mytestdb`.`MyTri3` AFTER DELETE ON test FOR EACH ROW 
    BEGIN
    INSERT INTO logger VALUES(NULL,"你删除了一条数据",NOW());
    END$$

DELIMITER ;

old和new

old.字段 可以获取到被监听的表中的字段的旧值
new.字段 可以获取到被监听表中更新后的字段的新值

例如:往一张表t1中添加一条数据,另一张表t2也要添加一条同样的数据
  DELIMITER $$
CREATE
    TRIGGER `mytestdb`.`myTri6` AFTER INSERT
    ON `mytestdb`.`t1`
    FOR EACH ROW BEGIN
    INSERT INTO t2 VALUES(new.id,new.username,new.age);
    END$$

DELIMITER ;
 

例如:修改一张表t1中的数据,另一张表t2中的数据也要修改
  DELIMITER $$
CREATE
    TRIGGER `mytestdb`.`MyTri7` AFTER UPDATE
    ON `mytestdb`.`t1`
    FOR EACH ROW 
    BEGIN
    UPDATE t2 SET id=new.id,username=new.username,age=new.age WHERE id=old.id;
    END$$

DELIMITER 

视图 View

有结构(有行有列),但没有结果(结构中不真实存储数据)的虚拟的表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生(视图数据的来源)

1.创建视图语法
      create view 视图名称 as select语句(这个语句可以是一张或多张表的的普通查询,或多表查询)
      例如:创建单表视图 
      create view my_v1 as select * from student;
  
      例如:创建多表视图 注意:不要查询两张表中的同名字段 不然会报错
      create view my_v2 as select a.字段名,b.字段名 from a,b where a.id=b.id;

 2.查看视图 其实视图是一张 虚拟表 那关于查询表的语句 对视图都是可以用的
      比如:show tables;  desc my_v1
      只是在查看视图创建语句的的时候 把table 改成view
      如:show create view my_v1;

3.视图的使用: 视图的使用,只是为了简化查询,你可以把 视图当作表一样去使用 例如:select * from my_v1;
             视图的执行:其实本质就是执行封装的select语句

4.删除视图: drop view 视图名称  
           例如:drop view my_v1

5.修改视图:视图本身不可以修改,但是视图的来源是可以修改的(其实就是修改select 语句)
         语法: alter view 视图名字 as 新的select语句

6.视图的意义:(1)视图可以节省SQL语句,将一条复杂的查询语句,使用视图进行保存,以后可以直接对视图进行操作.
            (2)数据安全,视图操作注意是针对查询语句的,如果对视图结构进行处理(比如删除),不会影响基表的数据.
            所以相对来说数据比较安全
            (3)视图往往是在大项目中去使用,而且是多系统中去使用.我可以对外提供一些有用的数据,隐藏一些关键的数据.
            (4)视图对外可以提供友好的数据:不同的视图提供不同的数据,对外提供的数据好像是经过专门设计的一样.
            (5)视图可以更好的进行权限控制 比如对外隐藏我的一些基表的名称

7.视图数据的操作:视图是可以进行数据操作的(比如 增,删,改,视图中的数据),但是有很多限制
          视图插入数据:
  
          (1)多表视图不能插入数据
          (2)单表视图中可以插入数据(如果视图中字段没有基表中不能为空的字段且没有默认值的字段,是插入不成功的)
          (3)视图是可以向基表中插入数据的 (视图的操作是影响基表的)
  
          视图删除数据
          (1):多表视图不能删除数据
          (2):单表视图可以删除数据,也会影响到基表
           

函数

函数:包括内置函数和自定义函数

自定义函数

DELIMITER $$
  
  CREATE
     
      FUNCTION `mytestdb`.`myFun`(num INT)
      RETURNS INT

      BEGIN
      DECLARE i INT DEFAULT 100;
      SET i=i+num;
      RETURN i;
      END$$
  
  DELIMITER ;

函数调用:

select 函数名();

内置函数

数据库自带函数文章来源地址https://www.toymoban.com/news/detail-472887.html

到了这里,关于MySQL小记——存储过程、触发器、函数、视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 存储过程、触发器、游标、视图、自定义函数 字段类型、字段可空、统计字段、逻辑删除 权限系统数据库&无限极类别设计

    在数据库设计中,存储过程、触发器、游标、视图、自定义函数、字段类型、字段可空、统计字段、逻辑删除以及权限系统和无限级类别设计都是重要的概念。下面我将逐一解释这些概念,并提供相关的设计建议。 存储过程 (Stored Procedure) 定义 :存储过程是一组为了完成特定

    2024年03月09日
    浏览(36)
  • MySQL 存储过程&触发器&事务

    存储过程(Stored Procedure),是为了完成特定功能的SQL语句集。 存储过程可以理解为shell脚本这类型的命令集输出工具,但是在底层,存储过程拥有更多的优点: 语言的灵活性跟功能性更强 ,在原有基础之上可以插入 控制语句、循环语句等 让SQL语句的功能更强,能够完成更

    2024年02月04日
    浏览(2)
  • MySQL存储过程和触发器

    存储过程和触发器是数据库中用于执行特定任务的两种重要的数据库对象。它们由SQL语句组成,被预先编译并存储在数据库中,可以通过调用来执行。以下是对存储过程和触发器的简要说明以及如何创建和使用它们: 存储过程(Stored Procedure): 定义: 存储过程是一组SQL语句

    2024年01月21日
    浏览(34)
  • MySQL高级篇复盘笔记(一)【存储引擎、索引、SQL优化、视图、触发器、MySQL管理】

    MySQL高级篇复盘笔记(一)【存储引擎、索引、SQL优化、视图、触发器、MySQL管理】

    ❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于 Java后端开发 ,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得 关注 、 点赞 、 收藏 、 评论 ⭐️⭐️⭐️ 📣 您的支持将是我创作的动力,让我们一起加油进步吧!!!🎉🎉 连接层

    2024年02月06日
    浏览(28)
  • MySQL---存储函数、触发器

    MySQL---存储函数、触发器

    1. 存储函数 MySQL 存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算 或功能写成一个函数。 存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合。 存储函数与存储过程的区别: 存储函数有且只有一个返回值,而存储过程可

    2024年02月05日
    浏览(78)
  • MySQL-SQL存储过程/触发器详解(下)

    MySQL-SQL存储过程/触发器详解(下)

    ♥️ 作者:小刘在C站 ♥️ 个人主页:  小刘主页  ♥️ 努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏: 云计算技术 ♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSD

    2024年02月11日
    浏览(28)
  • MySQL-SQL存储过程/触发器详解(上)

    MySQL-SQL存储过程/触发器详解(上)

    ♥️ 作者:小刘在C站 ♥️ 个人主页:  小刘主页  ♥️ 努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏: 云计算技术 ♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSD

    2024年02月09日
    浏览(30)
  • Mysql数据库实验报告--实验五 存储过程和触发器

    Mysql数据库实验报告--实验五 存储过程和触发器

    在这个系列会更新一些最近老师要求写的实验报告~ 大家尽量对着我的文章做一个参考,不要盲目的cv,毕竟这个对于我们以后的工作学习还是十分重要的。 从这个实验开始,就不在cmd命令行里面进行mysql数据库的操作,因为代码长度和代码的复杂性,需使用 MySQL Workbench: 双

    2024年02月09日
    浏览(35)
  • MySQL-SQL存储函数以及触发器详解

    MySQL-SQL存储函数以及触发器详解

    ♥️ 作者:小刘在C站 ♥️ 个人主页:  小刘主页  ♥️ 努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏: 云计算技术 ♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSD

    2024年02月11日
    浏览(35)
  • 存储过程触发器

    存储过程: 存储过程是一组预编译的SQL语句,可以在数据库中存储并重复使用。存储过程可以提高性能、减少网络流量并提高安全性。MSSQL中的存储过程使用T-SQL编写。 触发器: 触发器是一种特殊类型的存储过程,它会在数据库中执行某个操作(如INSERT、UPDATE或DELETE)时自动

    2024年02月06日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包