头歌实训之游标触发器

🌟 各位看官好,我是maomi_9526

🌍 种一棵树最好是十年前,其次是现在!

🚀 今天来学习C语言的相关知识。

👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦

目录

5. 游标

5.1 声明游标

5.2 打开游标

5.3 取出数据

5.4 关闭游标

5.5 异常处理器(Handler)

5.6 游标的完整示例

6. 触发器

6.1 创建触发器

6.2 删除用户时同步删除其扩展表

6.3 查看、删除触发器

7. 注意事项与坑

触发器示例


5. 游标

在 MySQL 中,游标(Cursor)是一种用于遍历查询结果集的机制。游标允许你逐行处理查询结果,对于一些复杂的操作,比如逐行处理数据、进行复杂的计算等,游标非常有用。通常,游标用于存储过程中,在需要逐行处理结果集时使用。

5.1 声明游标

使用 DECLARE 语句声明游标。在声明游标时,需要指定游标基于的查询。

语法:

DECLARE 游标名 CURSOR FOR 查询语句;
5.2 打开游标

通过 OPEN 语句打开游标并执行查询。

语法:

OPEN 游标名;
5.3 取出数据

使用 FETCH 语句从游标中获取一行数据。

语法:

FETCH NEXT FROM 游标名 INTO 变量列表;

FETCH 会将游标当前指向的行的数据加载到指定的变量中。

5.4 关闭游标

当数据处理完毕后,使用 CLOSE 语句关闭游标。

语法:

CLOSE 游标名;
5.5 异常处理器(Handler)

在 MySQL 中,Handler(异常处理器)是用于处理存储过程中的异常和错误的机制。Handler 可以帮助在遇到特定条件(如查询结果为空、错误发生等)时,自动执行指定的操作,从而提高程序的健壮性和灵活性。

MySQL 提供了多种 Handler 类型,主要通过 DECLARE 语句声明。在存储过程中,Handler 用于捕获特定条件(如查询没有返回结果、触发错误等),并执行相应的操作。

Handler 机制的目的是:当遇到异常或特定条件时,不需要让存储过程中断,而是可以继续执行后续的逻辑。

Handler 的基本语法:

DECLARE handler_type HANDLER FOR condition_value action;

常见的 Handler 语句例子包括:

DECLARE EXIT HANDLER FOR SQLSTATE '02000';  -- 退出码退出
DECLARE EXIT HANDLER FOR NOT FOUND;         -- 未找到退出
DECLARE EXIT HANDLER FOR SQLWARNING;       -- SQL警告退出
5.6 游标的完整示例

以下是一个完整的游标示例,演示了如何使用游标在存储过程中逐行处理数据:

DELIMITER ##
CREATE PROCEDURE s10(IN p_sdept VARCHAR(10))
BEGINDECLARE c_snme VARCHAR(20);DECLARE c_sno VARCHAR(5);DECLARE c_birthday DATE;DECLARE c_name CURSOR FOR SELECT sno, snme, birthday FROM student WHERE p_sdept = sdept;DECLARE EXIT HANDLER FOR NOT FOUND CLOSE c_name;CREATE TABLE IF NOT EXISTS r1 (id VARCHAR(5),name VARCHAR(20),birthday DATE);OPEN c_name;WHILE TRUE DOFETCH c_name INTO c_sno, c_snme, c_birthday;INSERT INTO r1 VALUES(c_sno, c_snme, c_birthday);END WHILE;CLOSE c_name;
END ##
DELIMITER ;

6. 触发器

触发器(Trigger)是 MySQL 中的一种机制,允许在数据库表中发生特定事件(如插入、更新或删除)时自动执行一系列操作。

6.1 创建触发器

创建触发器时,首先使用 DELIMITER 临时改变语句分隔符,以便在触发器体内使用分号。然后,通过 CREATE TRIGGER 语句创建触发器。

语法:

DELIMITER $$               -- 临时换分隔符,避免碰到触发器体内的分号CREATE TRIGGER 触发器名
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON 表名
FOR EACH ROW
BEGIN-- 触发器体:可写多条语句-- 可用 NEW.列名 访问“新值”-- 可用 OLD.列名 访问“旧值”(对于 INSERT 没旧值,DELETE 没新值)
END$$DELIMITER ;                -- 恢复默认分隔符
6.2 删除用户时同步删除其扩展表

以下触发器示例在删除用户时,同时删除用户在 user_profile 表中的扩展信息:

DELIMITER $$CREATE TRIGGER user_bd_cleanup
BEFORE DELETE ON user
FOR EACH ROW
BEGINDELETE FROM user_profile WHERE uid = OLD.uid;
END$$DELIMITER ;
6.3 查看、删除触发器
  • 查看当前库所有触发器:

SHOW TRIGGERS\G
  • 查看某触发器的创建语句:

SHOW CREATE TRIGGER student_ai_log\G
  • 删除触发器:

DROP TRIGGER IF EXISTS student_ai_log;

7. 注意事项与坑

主题说明
权限需要 TRIGGER 权限(或 SUPER)才能创建/删除触发器。
单表同事件多触发器MySQL 8.0 允许同一“事件+时机”创建多个触发器,但 5.7 及更早版本只允许一个。
递归触发触发器里对同一张表再执行 INSERT/UPDATE/DELETE 会再次触发,谨防无限递归。
事务触发器在当前事务中执行,若触发器报错,整个外层语句会回滚。
NEW/OLD 只读限制BEFORE UPDATE 中可修改 NEW.xxx 来影响即将写入的值;其他场景 NEW/OLD 均只读。
不支持 COMMIT/ROLLBACK触发器体内禁止显式提交或回滚。
触发器示例
DELIMITER ##CREATE TRIGGER tb_user_insert_trigger
AFTER INSERT ON student
FOR EACH ROW
BEGININSERT INTO user_logs (operation, operate_time, operate_id, operate_params)VALUES ('insert',NOW(),NEW.sno,CONCAT('插入的数据内容为:sno=', NEW.sno, ', name=', NEW.snme));
END##DELIMITER ;

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

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

相关文章

【深度学习】多头注意力机制的实现|pytorch

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾:【深度学习】注意力机制| 基于“上下文”进行编码,用更聪明的矩阵乘法替代笨重的全连接每日一言🌼: 路漫漫其修远兮,吾…

java16

1.API续集 可以导入别人写好的clone的jar包 注意:方法要有调用者,如果调用者是null就会报错 2.如何导入别人写好的jar包 复制jar包然后粘贴在lib里面,然后右键点击jar包再点击下面的add 3.关于打印java中的引用数据类型

PostgreSQL的扩展 credcheck

PostgreSQL的扩展 credcheck credcheck 是 PostgreSQL 的一个安全扩展,专门用于强制实施密码策略和凭证检查,特别适合需要符合安全合规要求的数据库环境。 一、扩展概述 1. 主要功能 强制密码复杂度要求防止使用常见弱密码密码过期策略实施密码重复使…

MyBatis中的@Param注解-如何传入多个不同类型的参数

mybatis中参数识别规则 默认情况下,MyBatis 会按照参数位置自动分配名称:param1, param2, param3, ...或者 arg0, arg1。 // Mapper 接口方法 User getUserByIdAndName(Integer id, String name); 以上接口在XML中只能通过param1或者arg0这样的方式来引用,可读性差。 &l…

DIFY教程第一集:安装Dify配置环境

一、Dify的介绍 https://dify.ai/ Dify 是一款创新的智能生活助手应用,旨在为您提供便捷、高效的服务。通过人工智能技术, Dify 可以实现语音 助手、智能家居控制、日程管理等功能,助您轻松应对生活琐事,享受智慧生活。简约的…

5、Rag基础:RAG 专题

RAG 简介 什么是检索增强生成? 检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强…

GAMES202-高质量实时渲染(homework1)

目录 Homework1shadow MapPCF(Percentage Closer Filter)PCSS(Percentage Closer Soft Shadow) GitHub主页:https://github.com/sdpyy1 作业实现:https://github.com/sdpyy1/CppLearn/tree/main/games202 Homework1 shadow Map 首先需要完成MVP矩阵的构造&#xf…

JDK(Ubuntu 18.04.6 LTS)安装笔记

一、前言 本文与【MySQL 8(Ubuntu 18.04.6 LTS)安装笔记】同批次:先搭建数据库,再安装JDK,后面肯定就是部署Web应用:典型的单机部署。“麻雀虽小五脏俱全”,善始善终,还是记下来吧。…

软件测试之接口测试常见面试题

一、什么是(软件)接口测试? 接口测试:是测试系统组件间接口的一种测试方法 接口测试的重点:检查数据的交换,数据传递的正确性,以及接口间的逻辑依赖关系 接口测试的意义:在较早期开展,在软件开发的同时…

Lua 第11部分 小插曲:出现频率最高的单词

在本章中,我们要开发一个读取并输出一段文本中出现频率最高的单词的程序。像之前的小插曲一样,本章的程序也十分简单但是也使用了诸如迭代器和匿名函数这样的高级特性。 该程序的主要数据结构是一个记录文本中出现的每一个单词及其出现次数之间关系的表。…

软件项目进度管理活动详解

目录 1. 活动定义(Activity Definition) 2. 活动排序(Activity Sequencing) 3. 活动资源估算(Activity Resource Estimating) 4. 活动历时估算(Activity Duration Estimating) …

docker 国内源和常用命令

Ubuntu | Docker Docs 参考docker官方安装docker # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt…

身份与访问管理(IAM):零信任架构下的认证授权技术与实战

身份与访问管理(IAM):零信任架构下的认证授权技术与实战 在网络安全防御体系中,身份与访问管理(Identity and Access Management, IAM)是守护数字资产的“数字门禁系统”。随着远程办公和多云架构的普及&a…

Maven进阶知识

一、Maven 坐标 (一)概念 在 Maven 中坐标是构件的唯一标识,其元素包括 groupId、artifactId、version、packaging、classifier。其中 groupId、artifactId、version 是必定义项,packaging 默认为 jar。 (二&#x…

网络原理 ——TCP 协议

TCP 报文结构 TCP 头部 20字节(无选项),关键字段: 字段长度(bit)说明源端口16发送方端口目的端口16接收方端口序列号(seq)32数据字节的编号确认号(ack)32期…

C#使用sftp远程拷贝文件

需要下载 的包:Core.Renci.SshNet 下载依赖包的时候需要注意版本,高版本的.net环境不支持会用不了,我用的.net5,所以下载的2021.10.2 功能的核心式创建一个SftpClient,并传入所需要的参数:远程IP地址,端口…

文本预处理(NLTK)

1. 自然语言处理基础概念 1.1 什么是自然语言处理 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于…

socket编程基础

上一篇 --- 网络基础概念(下)https://blog.csdn.net/Small_entreprene/article/details/147320155?fromshareblogdetail&sharetypeblogdetail&sharerId147320155&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link 理…

CSS 解决手机浏览器默认行为(点击出现蓝色背景)

最近写了一个 Web 应用,可以兼容手机端和PC端,在PC端调试的时候没有发现这个问题,但是在手机上或者PC浏览器改成手机模式进行调试的时候就会出现下面这个场景: 这是两个 div,点击的时候,会出现一个蓝色的背…

多模态大语言模型arxiv论文略读(三十八)

Tables as Texts or Images: Evaluating the Table Reasoning Ability of LLMs and MLLMs ➡️ 论文标题:Tables as Texts or Images: Evaluating the Table Reasoning Ability of LLMs and MLLMs ➡️ 论文作者:Naihao Deng, Zhenjie Sun, Ruiqi He, A…