数据库的存储过程、触发器、事件 实现(超精简)

一 存储过程

什么是存储过程 : 自己搜
和代码写的有什么区别: 没区别
为什么用存储过程: 快

例子

-- 创建 test名字的存储过程
CREATE PROCEDURE `test`(in idin INT)
BEGIN-- 创建变量declare id int default 0;declare stopflag int default 0;declare username varchar(31) default '';-- 创建游标declare item cursor for select u.router_id id, u.`name` username from base_router u where u.router_status = idin;-- 出现异常时执行功能(可做循环结束判断)declare continue handler for not found set stopflag = 1;-- 打开游标OPEN item;-- 创建一个名字为 loop_lable 的loop循环loop_lable: LOOP-- 将游标的一行注入变量里fetch item into id, username;-- if判断是否结束IF stopflag = 1 THEN-- 结束 循环结束LEAVE loop_lable; END IF;-- 业务逻辑处理BEGINIF id = 5 THENUPDATE base_router r SET r.create_user = '10001' WHERE r.router_id = id;ELSEUPDATE base_router r SET r.update_user = '10001' WHERE r.router_id = id;END IF;END;-- loop 结束语句END LOOP loop_lable;-- 执行完成关闭游标close item;
END

解析:

1. 创建存储过程:procedure

create procedure procedure_name(in itemIn int, inout itemOut int, out itemOut int)
begin
...
end;
-- in 传递参数
-- out 输出参数
-- inout 传递参数并输出
-- procedure_name 存储过程名称

2. 调用存储过程 : call

 call name();-- 传递参数set @item = ''call name(@item);select @item 

3. 变量: declare

begin--  创建参数,并指定参数类型,默认值declare item varchar(31) default '';-- 使用 set 赋值set item = 'bianlaing';-- 使用 into 赋值select name into item from user where 1 = 1;
end;

4. 变量的作用于只在begin - end 之间,begin - end 可以有多层,可设置全局变量

begindeclare item varchar(31) default '';begin...end
end

5. 条件语句

-- if格式: if boolean then...elseif boolean then...else ...end if;
-- case格式:case itemwhen boolean then ...when boolean then ...else ...end case;

6. 循环

-- while 循环
while(boolean) do
...
end while;
-- repeat  循环
repeat begin...end;
-- 达成条件结束 为true时结束,与while条件相反
until boolean
end repeat;
-- loop循环
loop_name: loop if boolean then leave loop_name;else...end if;...
end loop loop_name;

7. 游标 : cursor

代表结果集,可对结果集进行循环

-- 创建 test名字的存储过程
CREATE PROCEDURE `test`(in idin INT)
BEGIN-- 创建变量declare id int default 0;declare stopflag int default 0;declare username varchar(31) default '';-- 创建游标declare item cursor for select u.router_id id, u.`name` username from base_router u where u.router_status = idin;-- 游标出现异常时执行功能(可做循环结束判断)declare continue handler for not found set stopflag = 1;-- 打开游标OPEN item;-- 创建一个名字为 loop_lable 的loop循环loop_lable: LOOP-- 将游标的一行注入变量里fetch item into id, username;-- if判断是否结束IF stopflag = 1 THEN-- 结束 循环结束LEAVE loop_lable; END IF;-- 业务逻辑处理BEGIN...END;-- loop 结束语句END LOOP loop_lable;-- 执行完成关闭游标close item;
END

在这里插入图片描述
在这里插入图片描述

二 触发器

关键词:TRIGGER

-- 触发器共有三种:insert,update,delete
-- 触发事件有两种:after, before
-- 触发器的参数只有两种: new,old   insert 只能用new delete 只能用old updata 修改前的用old,修改后的用new
-- 触发器查看: show TRIGGERS; 或者选择 on 后边的主表,可以查看触发器(navicat),plsql可以直接看trigger
CREATE TRIGGER test_updata AFTER INSERT ON test1FOR EACH ROWBEGININSERT INTO test2(id,name,status) VALUES (new.id, new.name,new.status);END;

关于触发器在哪看

  1. show TRIGGERS
    在这里插入图片描述
  2. AFTER INSERT ON test1 的表里
    在这里插入图片描述
    在这里插入图片描述

三 事件

就是定时任务
关键词 event

规则

CREATE Event [IF NOT EXISTS] event_name -- 创建使用create event
ON SCHEDULE schedule_time-- on schedule 什么时候来执行,执行频率
-- on schedule at '2023-02-01 04:00:00’ 指定时间
-- on schedule every 1 second 每秒执行一次
-- 也可以是 minute、hour、day、week、month、year
-- on schedule every 1 day starts ‘2023-02-01 04:00:00' 指定每次的指定时间
[ON COMPLETION [NOT] PRESERVE] -- 调度计划执行完成后是否还保留
[ENABLE | DISABLE] -- 是否生效事件
[COMMENT 'comment'] -- 事件的注释
DO event_body; -- 这个调度计划要做什么?

例子

CREATE EVENT `test_event` 
ON SCHEDULE AT '2023-08-09 11:45:00' 
ON COMPLETION PRESERVE
ENABLE
DO INSERT INTO test1(id,name,status) VALUES (3, '张三','1');

事件在哪

  1. show events;

在这里插入图片描述
2. navcat
在这里插入图片描述
写在最后:
在理论上,数据库的存储过程、触发器、事件 都可以用代码替代,就是一串逻辑、定时任务等。但为啥推荐使用数据库上的功能呢?
1. 可读性 – 比看代码掉的头发少
2. 速度快 – 全在库内执行,不需要先取出来 再添加逻辑,再插入 ,减少数据库访问
3. 减少网络延迟 – 一般情况下数据库和程序不在同一个服务器上,还要访问

4. 体现你的价值 --薅着你老板仅剩不多的头发,让他涨工资

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/61550.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tomcat入门介绍

tomcat官网下载8.5.9版本,官网地址:https://tomcat.apache.org/download-80.cgi 下载完成后直接解压即可 tomcat目录 解压后,可以看到tomcat有以下目录 /bin - 启动、关闭和其他脚本 *.sh后缀是linux下的脚本文件*.bat后缀windows系统下的…

【C语言学习】函数的定义和调用

一、函数定义 要有返回类型、函数名和函数体 二、调用函数 函数名(函数值); ()起到表示函数调用的重要作用,即使没有参数也需要() 若有参数,则需要给出正确的数量和顺序…

内网隧道—HTTP\DNS\ICMP

本文仅限于安全研究和学习,用户承担因使用此工具而导致的所有法律和相关责任! 作者不承担任何法律和相关责任! HTTP隧道 Neo-reGeorg Neo-reGeorg 是一个旨在积极重构 reGeorg 的项目,目的是: 提高可用性&#xff0…

innovus 报告多边形floorplan的boundary坐标

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球 历史文章: 常用dbGet命令 dbGet快速入门 使用"Cut Rectilinear"功能可以​调整floorplan形状,使其变成非矩形多边形(polygon)。​ …

前端面试自我介绍

前端面试自我介绍精选篇1 各位面试官大家好,我叫__,就读于__大学__学,大学本科学历,我的求职意向是与金融专业相关的职位,本人拥有较强的学习能力,能快速适应工作环境,兴趣爱好广泛&#xff0c…

计算机服务器被360后缀勒索病毒攻击怎么办,勒索病毒解密

计算机技术的不断发展,不仅方便了企业的生产生活,也为社会的发展带来了巨大贡献,但随之而来的网络威胁也不断增加,勒索病毒就是其中较为常见的常见的威胁。近期,我们收到很多企业的求助,企业的计算机服务器…

Stable Diffusion - 幻想 (Fantasy) 风格与糖果世界 (Candy Land) 的人物图像提示词配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132212193 图像由 DreamShaper8 模型生成,融合糖果世界。 幻想 (Fantasy) 风格图像是一种以想象力为主导的艺术形式,创造了…

Android:换肤框架Android-Skin-Support

gihub地址:https://github.com/ximsfei/Android-skin-support 样例: 默认: 更换后: 一、引入依赖: // -- 换肤依赖implementation skin.support:skin-support:4.0.5// skin-supportimplementation skin.support:ski…

Spring MVC程序开发

目录 1. 什么是Spring MVC? 1.1 什么是MVC 1.2 MVC和Spring MVC 的关系 1.3 为什么要学Spring MVC? 2. Spring MVC的使用 2.1 Spring MVC的创建和连接 2.1.1 项目创建 2.1.2 项目连接 2.1.2.1 连接 2.1.2.2 RequestMapping注解介绍 2.1.2.3 GetMapping和 PostMapping 2.2 获取…

17.电话号码的字母组合(回溯)

目录 一、题目 二、代码 一、题目 17. 电话号码的字母组合 - 力扣(LeetCode) 二、代码 class Solution {const char*data[10]{"","","abc","def","ghi","jkl","mno","pq…

鸿蒙边缘计算网关正式开售

IDO-IPC3528鸿蒙边缘计算网关基于RK3568研发设计,采用22nm先进工艺制程,四核A55 CPU,主频高达2.0GHz,支持高达8GB高速LPDDR4,1T算力NPU,4K H.265/H264硬解码;视频输出接口HDMI2.0,双…

OpenMV 自适应颜色阈值

目录 演示视频 思路讲解 OprnMV代码 演示视频 备战2023电赛~openmv自适应颜色阈值(附源代码网盘链接) 思路讲解 1. 参考openmv官方例程讲解10-Color-Tracking->image_statistics_info图像统计信息https://book.openmv.cc/example/10-Color-Trackin…