mysql 触发器

文章介绍了MySQL中的触发器机制,包括如何创建、查看和删除触发器。触发器在INSERT、UPDATE或DELETE操作后自动执行定义的SQL语句,用于监听和响应数据库表的数据变化。举例展示了在user表上创建添加、修改和删除操作的触发器,并在user_operation表中记录这些操作的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

触发器:当对某张表进行 INSERT、DELETE、UPDATE 操作时,会自动触发定义的触发器中的操作。顾名思义,当我们为某张表定义触发器后,向表中添加、删除、修改数据时,会触发触发器中定义的操作,触发器像是一个事件的监听,一旦监听的事件发生,就会有所反应

mysql 只支持行级触发器

目录

1、触发器语法

1.1、创建触发器

1.2、查看触发器

1.3、删除触发器

2、示例测试

2.1、测试添加类型触发器

2.2、测试修改类型触发器

2.3、测试删除类型触发器


1、触发器语法

1.1、创建触发器

定义触发器语法格式

CREATE TRIGGER 触发器名称
BEFORE/AFTER INSERT/UPDATE/DELETE
ON 表名 FOR EACH ROW
BEGIN
内容
END;

BEFORE 或 AFTER 表示之前 还是 之后触发

INSERT 或 UPDATE 或 DELETE 表示监听 INSERT操作 还是 UPDATE操作 还是DELETE操作

示例

CREATE TRIGGER user_insert_trigger
AFTER INSERT ON user FOR EACH ROW
BEGIN
	INSERT INTO user_operation(operation_type, operation_content) values ('insert', CONCAT('添加后的数据:', new.name));
END;

为 user 表创建名为 user_insert_trigger 的触发器,触发器内容是当user表执行insert操作后,执行INSERT INTO user_operation(operation_type, operation_content) values ('insert', CONCAT('添加后的数据:', new.name)); 这个sql语句,语句中可以通过new.的形式拿到insert 到 user表的数据

这里除了new.外还有old. 

new.表示新的数据;old. 表示原来的数据

1.2、查看触发器

查看触发器

show TRIGGERS;

1.3、删除触发器

删除触发器

DROP TRIGGER 触发器名称

2、示例测试

笔者创建2张表,一张user表,一张user_operation表,然后为user表创建触发器,当user表有数据变化时,向 user_operation 表记录操作

创建 user 表

CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

创建 user_operation 表

CREATE TABLE `user_operation`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `operation_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `operation_content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

 

2.1、测试添加类型触发器

创建添加操作的触发器

CREATE TRIGGER user_insert_trigger
AFTER INSERT ON user FOR EACH ROW
BEGIN
	INSERT INTO user_operation(operation_type, operation_content) values ('insert', CONCAT('添加后的数据:', new.name));
END;

 

在 user 表执行 insert 测试效果

INSERT INTO user(name, age) VALUES('叶绿思雨', 17);

 

2.2、测试修改类型触发器

创建修改类型的触发器

CREATE TRIGGER user_update_trigger
AFTER UPDATE ON user FOR EACH ROW
BEGIN
	INSERT INTO user_operation(operation_type, operation_content) values ('update', CONCAT('修改前的数据:', 'name:', old.name, 'age:', old.age));
	INSERT INTO user_operation(operation_type, operation_content) values ('update', CONCAT('添加后的数据:', 'name:', new.name, 'age:', new.age));
END;

show TRIGGERS;

 

更新数据

update user set name = '月星瀚浩', age = 19 where id = 4;

 

2.3、测试删除类型触发器

删除类型触发器

CREATE TRIGGER user_delete_trigger
AFTER DELETE ON user FOR EACH ROW
BEGIN
	INSERT INTO user_operation(operation_type, operation_content) values ('delete', CONCAT('删除前的数据:', 'name:', old.name, 'age:', old.age));
END;

删除数据

delete from user where id = 4

 

 

至此完

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世君子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值