前言
Github:https://github.com/yihonglei/road-of-arch/tree/master/thinking-in-mysql
概述
MySql 从 5.0.2 开始支持触发器。触发是与表相关的数据库操作,在满足定义条件时触发,并执行触发器中定义的语句。
可以协助应用程序在数据库端确保数据的完整性,减少不必要的逻辑处理。触发器只能创建在永久表上,不能创建在临时表上。
对于同一个表,相同触发时间,相同触发事件,只能定义一个触发器。
创建语法:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name FOR EACH ROW trigger_statement
trigger_name:触发器名字
trigger_time:触发时间,包括 before 或 after,before 是指在检查约束前触发,after 是检查约束后触发
trigger_event:触发事件,包括insert,update 或 delete
table_name:触发器针对的表名
trigger_statement:触发器触发后执行的sql集合
FOR EACH ROW:行级触发器,Mysql 不支持语句级触发器
注意:使用 old 和 new 来引用触发器中发生变化的记录内容。
一 实例准备条件
创建表1:
CREATE TABLE `t_user_main` (
`f_userId` int(10) NOT NULL AUTO_INCREMENT COMMENT '用户id,作为主键',
`f_userName` varchar(5) DEFAULT NULL COMMENT '用户名',
`f_age` int(3) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`f_userId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
插入数据:
INSERT INTO t_user_main (f_userName, f_age)
VALUES('one',24),('two',25),('three',26),('four',27),('five',28),('six',29);
创建表2:
CREATE TABLE `t_user_person_info` (
`f_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`f_userId` int(11) NOT NULL COMMENT '用户id',
`f_salary` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '工资',
PRIMARY KEY (`f_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二 创建触发器实例
DELIMITER $$
CREATE TRIGGER user_main_tr AFTER INSERT
ON t_user_main
FOR EACH ROW
BEGIN
INSERT INTO t_user_person_info(f_userId) VALUES (new.f_userId);
END $$
DELIMITER;
测试触发器:
三 查看触发器
触发器查看不如表,视图,函数,存储过程查看方便,mysql提供的触发器查看命令如下:
show triggers \G;
该命令只能查看所有的触发器,如果需要查看具体的触发器,需要使用系统库 information_schema 查询。
查看所有触发器,这里只有一个,所以看到一个,如果有多个,可以看到多个:
指定触发器查看:
四 删除触发器
DROP TRIGGER [schema_name.] trigger_name;