广告
返回顶部
首页 > 资讯 > 数据库 >MySQL触发器的使用和优缺点介绍
  • 859
分享到

MySQL触发器的使用和优缺点介绍

2024-04-02 19:04:59 859人浏览 八月长安
摘要

目录前言1. 触发器概述2. 触发器的创建2.1 创建触发器语法2.2 代码举例3. 查看、删除触发器3.1 查看触发器3.2 删除触发器4. 触发器的优缺点4.1 优点4.2 缺点

前言

在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息和库存信息分别存放在2个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时在库存表中添加一条库存记录。

这样一来,我们就必须把这两个关联的操作步骤写到程序里面,而且要用事务包裹起来,确保这两个操作成为一个原子操作 ,要么全部执行,要么全部不执行。

要是遇到特殊情况,可能还需要对数据进行手动维护,这样就很 容易忘记其中的一步 ,导致数据缺失。这个时候,咱们可以使用触发器。

你可以创建一个触发器,让商品信息数据的插入操作自动触发库存数据的插入操作。这样一来,就不用担心因为忘记添加库存数据而导致的数据缺失了。

1. 触发器概述

Mysql从 5.0.2 版本开始支持触发器。mysql的触发器和存储过程一样,都是嵌入到Mysql服务器的一段程序。

触发器是由事件来触发某个操作,这些事件包括 INSERT 、 UPDATE 、 DELETE 事件。所谓事件就是指用户的动作或者触发某项行为。如果定义了触发程序,当数据库执行这些语句时候,就相当于事件发生了,就会自动激发触发器执行相应的操作。当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。

2. 触发器的创建

2.1 创建触发器语法

创建触发器的语法结构是:


CREATE TRIGGER 触发器名称
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名
FOR EACH ROW
触发器执行的语句块;

说明:

①表名 :表示触发器监控的对象。

②BEFORE|AFTER :表示触发的时间。BEFORE 表示在事件之前触发;AFTER 表示在事件之后触发。

③INSERT|UPDATE|DELETE :表示触发的事件。

INSERT 表示插入记录;

UPDATE 表示更新记录;

DELETE 表示删除记录。

④触发器执行的语句块 :可以是单条SQL语句,也可以是由BEGIN…END结构组成的复合语句块。

2.2 代码举例

举例:

①创建数据表:


CREATE TABLE test_trigger (
id INT PRIMARY KEY AUTO_INCREMENT,
t_note VARCHAR(30)
);

CREATE TABLE test_trigger_log (
id INT PRIMARY KEY AUTO_INCREMENT,
t_log VARCHAR(30)
);

②创建触发器:创建名称为before_insert的触发器,向test_trigger数据表插入数据之前,向test_trigger_log数据表中插入before_insert的日志信息。


DELIMITER //
CREATE TRIGGER before_insert
BEFORE INSERT ON test_trigger
FOR EACH ROW
BEGIN
	INSERT INTO test_trigger_log (t_log)
	VALUES('before_insert');
END //
DELIMITER ;

③向test_trigger数据表中插入数据


INSERT INTO test_trigger (t_note) VALUES ('测试 BEFORE INSERT 触发器');

④查看test_trigger_log数据表中的数据


mysql> SELECT * FROM test_trigger_log;
+----+---------------+
| id | t_log |
+----+---------------+
| 1 | before_insert |
+----+---------------+
1 row in set (0.00 sec)

3. 查看、删除触发器

3.1 查看触发器

查看触发器是查看数据库中已经存在的触发器的定义、状态和语法信息等。

方式1:查看当前数据库的所有触发器的定义


SHOW TRIGGERS\G

方式2:查看当前数据库中某个触发器的定义


SHOW CREATE TRIGGER 触发器名

方式3:从系统库infORMation_schema的TRIGGERS表中查询“salary_check_trigger”触发器的信息


SELECT * FROM information_schema.TRIGGERS;

3.2 删除触发器

触发器也是数据库对象,删除触发器也用DROP语句,语法格式如下:


DROP TRIGGER IF EXISTS 触发器名称;

4. 触发器的优缺点

4.1 优点

①触发器可以确保数据的完整性。

假设我们用 进货单头表 (demo.importhead)来保存进货单的总体信息,包括进货单编号、供货商编号、仓库编号、总计进货数量、总计进货金额和验收日期。

在这里插入图片描述

用 进货单明细表 (demo.importdetails)来保存进货商品的明细,包括进货单编号、商品编号、进货数量、进货价格和进货金额。

在这里插入图片描述

每当我们录入、删除和修改一条进货单明细数据的时候,进货单明细表里的数据就会发生变动。这个时候,在进货单头表中的总计数量和总计金额就必须重新计算,否则,进货单头表中的总计数量和总计金额就不等于进货单明细表中数量合

计和金额合计了,这就是数据不一致。

为了解决这个问题,我们就可以使用触发器,规定每当进货单明细表有数据插入、修改和删除的操作时,自动触发 2 步操作:

1)重新计算进货单明细表中的数量合计和金额合计;

2)用第一步中计算出来的值更新进货单头表中的合计数量与合计金额。

这样一来,进货单头表中的合计数量与合计金额的值,就始终与进货单明细表中计算出来的合计数量与合计金额的值相同,数据就是一致的,不会互相矛盾。

②触发器可以帮助我们记录操作日志。

利用触发器,可以具体记录什么时间发生了什么。比如,记录修改会员储值金额的触发器,就是一个很好的例子。这对我们还原操作执行时的具体场景,更好地定位问题原因很有帮助。

③触发器还可以用在操作数据前,对数据进行合法性检查。

比如,超市进货的时候,需要库管录入进货价格。但是,人为操作很容易犯错误,比如说在录入数量的时候,把条形码扫进去了;录入金额的时候,看串了行,录入的价格远超售价,导致账面上的巨亏。这些都可以通过触发器,在实际插入

或者更新操作之前,对相应的数据进行检查,及时提示错误,防止错误数据进入系统。

4.2 缺点

①触发器最大的一个问题就是可读性差。

因为触发器存储在数据库中,并且由事件驱动,这就意味着触发器有可能 不受应用层的控制 。这对系统维护是非常有挑战的。比如,创建触发器用于修改会员储值操作。如果触发器中的操作出了问题,会导致会员储值金额更新失败。我用

下面的代码演示一下:


mysql> update demo.membermaster set memberdeposit=20 where memberid = 2;
ERROR 1054 (42S22): Unknown column 'aa' in 'field list'

结果显示,系统提示错误,字段“aa”不存在。这是因为,触发器中的数据插入操作多了一个字段,系统提示错误。可是,如果你不了解这个触发器,很可能会认为是更新语句本身的问题,或者是会员信息表的结构出了问题。说不定你还会给

会员信息表添加一个叫“aa”的字段,试图解决这个问题,结果只能是白费力。

②相关数据的变更,可能会导致触发器出错。

特别是数据表结构的变更,都可能会导致触发器出错,进而影响数据操作的正常运行。这些都会由于触发器本身的隐蔽性,影响到应用中错误原因排查的效率。

4.3 注意点

注意,如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作,此时基于子表的UPDATE和DELETE语

句定义的触发器并不会被激活。

到此这篇关于MySQL触发器的使用和优缺点介绍的文章就介绍到这了,更多相关MySQL触发器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL触发器的使用和优缺点介绍

本文链接: https://www.lsjlt.com/news/158905.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL触发器的使用和优缺点介绍
    目录前言1. 触发器概述2. 触发器的创建2.1 创建触发器语法2.2 代码举例3. 查看、删除触发器3.1 查看触发器3.2 删除触发器4. 触发器的优缺点4.1 优点4.2 缺点...
    99+
    2022-11-12
  • MySQL中触发器和游标的介绍与使用
    触发器简介 触发器是和表关联的特殊的存储过程,可以在插入,删除或修改表中的数据时触发执行,比数据库本身标准的功能有更精细和更复杂的数据控制能力。 触发器的优点: 安全性:可以...
    99+
    2022-11-11
  • Json优缺点及使用介绍
    目录1. 什么是 JSON1.1 数组字面量1.2 对象字面量1.3 混合字面量1.4 JSON 语法1.5 JSON 编码和解码2. JSON 与 XML3. 服务器端 JSON ...
    99+
    2022-11-12
  • MySQL触发器定义及其优缺点
    SQL触发器是一种特殊类型的存储过程。 这是特别的,因为它不像直接像存储过程那样调用。 触发器和存储过程之间的主要区别在于,当对表执行数据修改事件时,会自动调用触发器,而存储过程必须要明确地调用。 ...
    99+
    2022-10-18
  • Percona XtraDB Cluster的优点和缺点介绍
    集群中每一个节点都是普通的MySQL/Percona Server,这意味着你可以把现存的MySQL/Percona Server直接接入集群,或者从集群中拎出来作为普通的MySQL服务。 每个节点拥有所有...
    99+
    2022-10-18
  • Python语言的优点和缺点介绍
    这篇文章主要介绍“Python语言的优点和缺点介绍”,在日常操作中,相信很多人在Python语言的优点和缺点介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python语言的优点和缺点介绍”的疑惑有所帮助!...
    99+
    2023-06-01
  • mysql触发器的缺点有哪些
    本篇文章为大家展示了mysql触发器的缺点有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。说明使用触发器实现的业务逻辑在出现问题时很难定位,尤其是涉及多个触发器时,会使后期维护困难。大量使用触发...
    99+
    2023-06-20
  • SQL触发器的优缺点有哪些
    这篇文章给大家分享的是有关SQL触发器的优缺点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.SQL触发器简介:SQL触发器是存储在数据库目录中的一组SQL语句。每当与表...
    99+
    2022-10-18
  • css expression的用法及其优缺点介绍
    本篇文章为大家展示了css expression的用法及其优缺点介绍,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 概述   css e...
    99+
    2022-10-19
  • Mysql中的触发器定义及语法介绍
    目录1.定义:2.语法:3.删除触发器4.查询触发器5.触发器类型OLD和NEW的使用1.定义:   触发器和存储过程相似,都是嵌入到 mysql 中的一段程序。触发器是由事件来触发某个操作。当数据库执行这些事件时,就会...
    99+
    2022-06-23
    mysql触发器
  • MySQL垂直切分和水平切分概念和优缺点介绍
    数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中...
    99+
    2022-10-18
  • Oracle触发器和程序包的基本介绍
    目录一、触发器的概念1、触发器的基本概念2、触发器的分类二、触发器的创建1、DML触发器的创建3、系统触发器4、触发器的禁用和启用5、触发器的查看和删除三、程序包1、程序包的创建2、程序包的删除四、总结一、触发器的概念 ...
    99+
    2022-07-05
    Oracle触发器 Oracle程序包
  • mysql 触发器的使用及注意点
    目录前言一、触发器简介二、触发器特点及使用场景1、增强数据库的安全性2、实现数据库操作的日志审计3、实现复杂的级联操作三、触发器类似与核心参数四、触发器语法1、创建语法2、查看触发器...
    99+
    2022-11-13
    mysql 触发器使用 mysql 触发器
  • mysql触发器简介、创建触发器及使用限制分析
    本文实例讲述了mysql触发器简介、创建触发器及使用限制。分享给大家供大家参考,具体如下: 简介 SQL触发器是存储在数据库目录中的一组SQL语句。每当与表相关联的事件发生时,即会执行或触发SQL触发器,例...
    99+
    2022-10-18
  • 关系型数据库和NOSQL数据库的优缺点介绍
    关系型数据库: 1) 关系数据库的特点是: - 数据关系模型基于关系模型,结构化存储,完整性约束。 - 基于二维表及其之间的联系,需要连接、并、交、差、除等数据操作。 - 采用结构化的查询语言(SQL)做数...
    99+
    2022-10-18
  • MYSQL触发器的使用
    概念:触发器是一种特殊的储存过程,在满足定义条件操作时触发,并且自动执行触发器中预先设定好的定义的语句集合 触发器是特殊的储存过程 触发器是在对表操作时,满足条件就可以自动调用预先编译的sql语句 安全性 可以基于数据库的值使用户...
    99+
    2021-10-21
    MYSQL触发器的使用
  • MySQL 触发器的使用和理解
    1.触发器是什么? 一类特殊的数据库程序,可以监视某种数据的操作(insert/update/delete),并触发相关的操作(insert/update/delete),保护数据的完整性。 个人理解就有...
    99+
    2022-05-17
    MySQL 触发器
  • MySQL的函数和触发器的使用
    前言MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语...
    99+
    2022-10-18
  • mysql数据库的高级应用索引、视图,触发器的详细介绍
    下文主要给大家带来mysql数据库的高级应用索引、视图,触发器的详细介绍,希望这些内容能够带给大家实际用处,这也是我编辑mysql数据库的高级应用索引、视图,触发器的详细介绍这篇文章的主要目的。好了,废话不...
    99+
    2022-10-18
  • MySQL触发器trigger的使用
    Q:什么是触发器?A:  触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的特性:  1、有begin end体,begin end;之间的语句可以写的简单或者复杂 ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作