触发器:当对某张表进行 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
至此完
还没有评论,来说两句吧...