SQL 触发器详解及代码演示

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: SQL 触发器详解及代码演示

1. 触发器的作用


触发器主要用于监视某个表的insert、update以及delete等更新操作,这些操作可以分别激活该表的insert、update或者delete类型的运行语句,从而实现数据的自动维护。


2. 创建触发器


创建一个触发器的语法如下:


create trigger [触发器名] [触发时机] [触发事件]
on [要监控的表名] for each row 
begin
  [要执行的语句]
end


触发时机包括 before和after,触发事件包括insert、update和delete,二者的组合,如before delete表示在删除前执行激活触发器,然后执行触发器中写定的代码。


例如下例代码,表示创建一个名为tri_test的触发器,它将会在prot_subscribe表执行插入操作后,执行begin…end中的代码(insert语句):


create trigger tri_test after insert on prot_subscribe for each row
begin
  insert into prot_log(mobile, id) values (new.mobile, new.product_id);
end


3. 查看触发器


3.1. show语句查看触发器


查看触发器的语法如下:


-- 查看指定数据库中的所有触发器
show triggers from [数据库名];
-- 或者,查看当前数据库中已定义的所有触发器
show triggers;


例如,要查看数据库sql_test中定义的触发器,则使用语句:


show triggers from sql_test;


返回的结果就是sql_test表中已定义的触发器的属性


3.2. information.schema表查看触发器


在MySQL系统中,在系统数据库information_ schema中存在一个存储所有触发器信息的系统表,查询该表格的记录也可以实现查看触发器功能。


例如


select * from information_schema.triggers;


返回的结果就是mysql中已定义的所有数据库


4. 删除触发器


删除触发器使用drop trigger语句,语法如下:


drop trigger [if exists] [触发器名]


例如,下面代码表示,如果在sqltest数据库中存在tri_sub_one触发器,则删除它:


drop trigger if exists sqltest.tri_sub_one;


5. 使用限制


1、一个表上只能有一个相同类型的触发器,因此在一个表上最多只能建立6个触发器,分别是:


before insert、after insert
before update、after update
before delete、after delete


2、new表示触发器的所在表中,激活了触发器的那一行数据。

具体地,在insert型触发器中,new关键字用来表示将要(before)或已经(after)插入的新数据;在UPDATE型触发器中,old关键字用来表示将要或已经被修改的原数据,new用来表示将要或已经修改为的新数据;在delete型触发器中,old用来表示将要或已经被删除的原数据;


使用方法: new.[字段名]。另外,old是只读的,而new则可以在触发器中使用set语句进行赋值,这样不会再次触发触发器,造成循环调用。


3、对于mysql而言,一般情况下,默认是以分好" ; "作为结束执行语句,这导致在触发器的begin…end语句中有多行代码时,与触发器中需要的分行起冲突,为解决此问题,mysql提供了delimiter关键字,如:

" delimiter || “,表示在下面的代码段中,将结束符号变成||。当触发器创建完成后,可以用” delimiter ; “来将结束符号变回分号” ; "


-- 用$$符号来表示语句结束
delimiter $$ 
drop trigger if exists `updateegopriceondelete`$$ 
create 
    trigger `updateegopriceondelete` after  delete on  `customerinfo` 
    for each row begin 
delete from egoprice  where customerid=old.customerid; 
    end $$ -- 语句结束
delimiter ;  -- 将结束符号由$$ 变回分号;


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
351 5
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
4927 11
|
SQL 关系型数据库 MySQL
创建SQL数据库的基本步骤与代码指南
在信息时代,数据管理显得尤为重要,其中数据库系统已成为信息技术架构的关键部分。而当我们谈论数据库系统时,SQL(结构化查询语言)无疑是其中最核心的工具之一。本文将详细介绍如何使用SQL创建数据库,包括编写相应的代码和必要的步骤。由于篇幅限制,本文可能无法达到您要求的2000字长度,但会尽量涵盖创建数
622 3
|
存储 SQL 安全
【数据库高手的秘密武器:深度解析SQL视图与存储过程的魅力——封装复杂逻辑,实现代码高复用性的终极指南】
【8月更文挑战第31天】本文通过具体代码示例介绍 SQL 视图与存储过程的创建及应用优势。视图作为虚拟表,可简化复杂查询并提升代码可维护性;存储过程则预编译 SQL 语句,支持复杂逻辑与事务处理,增强代码复用性和安全性。通过创建视图 `high_earners` 和存储过程 `get_employee_details` 及 `update_salary` 的实例,展示了二者在实际项目中的强大功能。
292 1
|
SQL 监控 关系型数据库
SQL错误代码1303解析与处理方法
在SQL编程和数据库管理中,遇到错误代码是常有的事,其中错误代码1303在不同数据库系统中可能代表不同的含义
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之将RDS切换到PolarDB-X 2.0时,代码层的SQL该如何改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
SQL 安全 关系型数据库
SQL错误代码1303解析与解决方案:深入理解并应对权限问题
在数据库管理和开发过程中,遇到错误代码是常见的事情,每个错误代码都代表着一种特定的问题
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在执行SQL查询时遇到报错,代码为[XX000],该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
SQL 分布式计算 大数据
大数据开发SQL代码编码原则和规范
这段SQL编码原则强调代码的功能完整性、清晰度、执行效率及可读性,通过统一关键词大小写、缩进量以及禁止使用模糊操作如select *等手段提升代码质量。此外,SQL编码规范还详细规定了代码头部信息、字段与子句排列、运算符前后间隔、CASE语句编写、查询嵌套、表别名定义以及SQL注释的具体要求,确保代码的一致性和维护性。
687 0
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
817 0