Mysql杂志(八)

游标

游标是MySQL中一种重要的数据库操作机制,它解决了SQL集合操作与逐行处理之间的矛盾。这个相信大家基本上都怎么使用过,这个都是建立在使用存储过程的基础上的。我们都知道SQL都是批量处理的也就是面向集合操作(一次操作多行),而有些使用场景需要一行一行的处理这个时候就可以用到我们的游标了,当然我们一般情况下还是使用Java代码分组分配处理的哈哈。因为对应小项目而言使用存储过程还是太麻烦和太复杂了。

#游标的声明
DECLARE cursor_name CURSOR FOR select_statement;
DECLARE emp_cursor CURSOR FOR  -实例SELECT id, name, salary FROM employees WHERE department = 'IT';#打开游标
OPEN cursor_name;
OPEN emp_cursor; -实例#获取数据
FETCH cursor_name INTO var1, var2, ...;
DECLARE emp_id INT; -实例
DECLARE emp_name VARCHAR(50);
DECLARE emp_salary DECIMAL(10,2);
FETCH emp_cursor INTO emp_id, emp_name, emp_salary;#关闭游标
CLOSE cursor_name;
CLOSE emp_cursor; -实例#基础使用
DELIMITER //
CREATE PROCEDURE process_employees()
BEGINDECLARE done INT DEFAULT FALSE;DECLARE e_id INT;DECLARE e_name VARCHAR(100);DECLARE e_salary DECIMAL(10,2);-- 声明游标DECLARE emp_cursor CURSOR FOR SELECT employee_id, name, salary FROM employees WHERE status = 'active';-- 声明异常处理器DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN emp_cursor;read_loop: LOOPFETCH emp_cursor INTO e_id, e_name, e_salary;IF done THENLEAVE read_loop;END IF;-- 业务处理:薪资超过1万加10%奖金IF e_salary > 10000 THENINSERT INTO bonuses(employee_id, amount) VALUES (e_id, e_salary * 0.10);END IF;END LOOP;CLOSE emp_cursor;
END //
DELIMITER ;

其实游标理解起来也很简单,就是Mysql自己的迭代器,对每一行进行精细的处理,当然这样的话速度肯定不够原来的sql快的。

触发器

触发器(Trigger)是MySQL中的一种特殊存储过程,它会在特定的数据库事件发生时自动执行。触发器与表紧密关联,这个其实和我们Java中的监听器是一个道理,监听某一种行为如何做某件事,而Mysql的触发器也是一样的不需要显示的调用就可以执行功能的。

触发时机

数据操作

说明

BEFORE

INSERT

插入数据前触发

AFTER

INSERT

插入数据后触发

BEFORE

UPDATE

更新数据前触发

AFTER

UPDATE

更新数据后触发

BEFORE

DELETE

删除数据前触发

AFTER

DELETE

删除数据后触发

DELIMITER //
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name FOR EACH ROW
[trigger_order]
trigger_body
DELIMITER ;

这个就是触发器的语法结构,其实和存储过程的结构是类似的,只是关键词不一样。

变量

说明

可用时机

NEW.column

新数据值

INSERT/UPDATE

OLD.column

原数据值

UPDATE/DELETE

-- 示例:记录员工薪资变更历史
DELIMITER //
CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGINIF OLD.salary != NEW.salary THENINSERT INTO salary_audit(employee_id, old_salary, new_salary, change_time) VALUES (NEW.id, OLD.salary, NEW.salary, NOW());END IF;
END //
DELIMITER ;

这个其实也是比较简单的,大家看看也都会这么写了,但是一般没有什么使用的场景,因为写到Java项目里代码可读性和日志查询要比mysql看起来是更加的直观的。

#查特定数据库的触发器
SHOW TRIGGERS FROM database_name;
-- 或
SHOW TRIGGERS LIKE 'pattern%';  -- 使用通配符#查某个表的触发器
SHOW TRIGGERS WHERE `Table` = 'table_name';#获取触发器sql
SHOW CREATE TRIGGER trigger_name;

总结

本篇主要讲了Mysql中的游标和触发器的作用和使用场景。

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

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

相关文章

Dify 从入门到精通(第 71/100 篇):Dify 的实时流式处理(高级篇)

Dify 从入门到精通(第 71/100 篇):Dify 的实时流式处理 Dify 入门到精通系列文章目录 第一篇《Dify 究竟是什么?真能开启低代码 AI 应用开发的未来?》介绍了 Dify 的定位与优势第二篇《Dify 的核心组件:从…

日志分析与安全数据上传脚本

最近在学习计算机网络,想着跟python结合做一些事情。这段代码是一个自动化脚本,它主要有三个功能:分析日志: 它从你指定的日志文件中读取内容,并筛选出所有包含特定关键字的行。网络交互: 它将筛选出的数据…

【论文阅读】Sparse4D v3:Advancing End-to-End 3D Detection and Tracking

标题:Sparse4D v3:Advancing End-to-End 3D Detection and Tracking 作者:Xuewu Lin, Zixiang Pei, Tianwei Lin, Lichao Huang, Zhizhong Su motivation 作者觉得做自动驾驶,还需要跟踪。于是更深入的把3D-检测&跟踪用sparse…

基于 DNA 的原核生物与微小真核生物分类学:分子革命下的范式重构​

李升伟 李昱均 茅 矛(特趣生物科技公司,email: 1298261062qq.com)传统微生物分类学长期依赖形态特征和生理生化特性,这在原核生物和微小真核生物研究中面临巨大挑战。原核生物形态简单且表型可塑性强,微小真核生物…

【FastDDS】Layer DDS之Domain (01-overview)

Fast DDS 域(Domain)模块详解 一、域(Domain)概述 域代表一个独立的通信平面,能在共享通用通信基础设施的实体(Entities)之间建立逻辑隔离。从概念层面来看,域可视为一个虚拟网络&am…

http和https区别是什么

区别主要有以下四点:HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。HTTP 连接建立相对简单&a…

推荐算法发展历史

推荐算法的发展历史是一部从简单规则到复杂智能,从宏观群体推荐到微观个性化精准推荐的 演进史。它大致可以分为以下几个阶段:推荐算法的发展历史是一部从简单规则到复杂智能,从宏观群体推荐到微观个性化精准推荐的演进史。它大致可以分为以下…

企业DevOps的安全与合规关键:三大主流DevOps平台能力对比

在数字化转型的浪潮中,DevOps平台已成为企业加速软件交付、提升协作效率的核心引擎。然而,随着应用范围的扩大,安全漏洞与合规风险也随之凸显。如何平衡速度与安全,实现高效且合规的DevOps流程,已成为企业亟需解决的关…

pgroll:简化PostgreSQL零停机迁移

pgroll:PostgreSQL零停机迁移的新思路作为后端开发者,我们都遇到过数据库变更的难题。想象一下,你需要在电商大促期间修改用户表结构——传统的ALTER TABLE可能导致锁表,用户下单流程中断,每分钟都是真金白银的损失。p…

JVM1.8与1.9的区别是什么?

一、核心机制变化 类加载器调整 JDK 1.8:使用三种类加载器: 启动类加载器(Bootstrap):加载核心类库(如 rt.jar)。扩展类加载器(ExtClassLoader):加载 JAVA_HO…

CentOS交换区处理

文章目录前言创建交换文件(推荐)清理旧交换区前言 很多刚开始使用 CentOS 的用户都会遇到。1GB 的交换分区在现代应用环境下确实偏小,很容易在内存压力大时导致系统性能下降甚至应用程序被强制终止。 关于交换分区的大小,没有一…

JavaScript原型与原型链:对象的家族传承系统

文章目录JavaScript原型与原型链:对象的"家族传承"系统 👨👩👧👦引言:为什么需要原型?原型系统三大核心概念概念关系图核心概念表一、原型基础:对象如何"继承"属…

数据库语法差异对比

特性MySQLMSSQLOraclepostgresql单行注释--、#&#xff08;少&#xff09;------多行注释/* *//* *//* *//* */字符串连接<code>CONCAT(str1,str2)</code>、<code>CONCAT_WS(separator, str1, str2)</code>、CONCAT&#xff08;str1,str2&#xff09;(…

GIS大学课程表都长啥样?几个地信专业的大学一周课程表

前几天&#xff0c;有个准大一的同学问&#xff1a;地信大学课程安排都是啥样的&#xff1f;简单的地理学、遥感学课程之类的对准大一的同学们来说太抽象了&#xff0c;有没有更具体一点的&#xff1f;他在新生群里问本校的学长&#xff0c;得到的课表不是这样的&#xff1a;就…

leetcode 3027. 人员站位的方案数 II 中等

给你一个 n x 2 的二维数组 points &#xff0c;它表示二维平面上的一些点坐标&#xff0c;其中 points[i] [xi, yi] 。 我们定义 x 轴的正方向为 右 &#xff08;x 轴递增的方向&#xff09;&#xff0c;x 轴的负方向为 左 &#xff08;x 轴递减的方向&#xff09;。类似的…

oracle 从一张表更新到另外一张表的方法(MERGE)

之前更新表格经常用 update aaa set (aaa.q,aaa.w) (select bbb.q,bbb.w from bbb where bbb.eaaa.e)的方法 后面学习了一个新的方法&#xff0c;MERGE法&#xff0c;这种写法更适合&#xff0c;因为对于空的值可以自定义定义其值&#xff0c;这样写存储过程的时候就不需要频繁…

Huggingface终于没忍住,OpenCSG坚持开源开放

在全球人工智能竞争进入白热化的当下&#xff0c;开源与闭源之路的选择正在成为决定未来格局的关键。当全球最大的AI开源平台Hugging Face终于承认"开源是赢得AI竞赛的关键"&#xff0c;并呼吁美国重新重视开源赛道时&#xff0c;OpenCSG&#xff08;开放传神&#x…

计算机网络模型总概述

//网络通讯 --- 不同主机之间的通信(进程间通信) 一、概述 目前使用的计算机网络模型主要分为两个&#xff1a;OSI七层模型和TCP/IP模型 相比OSI七层模型 &#xff0c;TCP/IP模型更简洁&#xff0c;更实用&#xff0c;因此目前所使用的基本都是TCP/IP模型&#xff0c;已成为…

HTTPS -> HTTP 引起的 307 状态码与HSTS

1.应用场景 主要用于了解HSTS, 以及如何合理设置, 如正式服和测试服, 开发环境; 摘要&#xff1a;当HTTPS网站返回307状态码临时重定向到HTTP时&#xff0c;会带来安全风险&#xff08;如中间人攻击和混合内容问题&#xff09;。 HSTS机制通过强制HTTPS通信可解决此问题&#…

PortSwigger靶场之DOM XSS in document.write sink using source location.search通关秘籍

一、靶场描述这个靶场在搜索查询的跟踪功能中&#xff0c;包含一个基于DOM的跨站脚本&#xff08;DOM-based XSS&#xff09;漏洞。该漏洞的产生是因为网站使用了一个名为 document.write 的 JavaScript 函数&#xff0c;这个函数会把数据直接写入到页面中。而写入的数据来源于…