MySQL深入浅出精讲触发器用法

文 / @UTHEME

MySQL触发器的概述和使用方法

在实际开发中,经常会遇到多个相互关联的表,为了保证数据的完整性,需要在不同的表中添加、更新和删除数据。为了避免因操作顺序出错或操作失误导致数据缺失或不一致的问题,可以使用MySQL触发器来实现自动触发某些操作,从而减少人为干预和提高数据的完整性。

触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE、DELETE事件。当数据库执行这些语句时候,就相当于事件发生了,就会自动激发触发器执行相应的操作。

触发器的创建语法如下:

CREATE TRIGGER trigger_name
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON table_name
FOR EACH ROW
trigger_body;

其中,

- trigger_name为触发器名称。
- BEFORE|AFTER表示触发的时间。BEFORE表示在事件之前触发;AFTER表示在事件之后触发。
- INSERT|UPDATE|DELETE表示触发的事件。INSERT表示插入记录时触发;UPDATE表示更新记录时触发;DELETE表示删除记录时触发。
- table_name表示触发器监控的对象。
- FOR EACH ROW是指每行数据被影响时都会触发触发器。
- trigger_body是触发器执行的语句块。

示例:

创建两张表

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)
);

创建触发器

为了演示触发器的使用,以在test_trigger表中插入数据时自动向test_trigger_log表中插入一条日志为例。

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

在test_trigger表中插入数据

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

查看test_trigger_log表中的数据,可以看到已经插入了一条日志:

查看删除触发器

可以使用SHOW TRIGGERS、SHOW CREATE TRIGGER和SELECT * FROM information_schema.TRIGGERS;等方法查看当前数据库的所有触发器以及某个触发器的定义。删除触发器可以使用DROP TRIGGER语句。

触发器的优缺点

触发器的优点是可以确保数据的完整性、帮助记录操作日志、可以对数据进行合法性检查等。

触发器的缺点是可读性差,容易出错,并且相关数据的变更可能会导致触发器出错。因此,在使用触发器时需要注意相关事项,尽可能规范化触发器的使用,并加强触发器的测试和维护。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。