- 需求描述
工作遇到一个这样的需求有两个表一个是用户基本信息表里面有一个字段是是否结婚。一个是家庭关系表里面有孩子表、配偶表、父母表等与用户有关系的信息用一个字段relative 区分。当你删除你的配偶的时候,需要更新用户表是否有配偶字段。其实使用代码也可以实现但是使用触发器更简介更高效处理。由于线上项目就不直接展示正式表,模拟真实表建立关系。 - 建立表关系
配偶表
CREATE TABLE `tb_mate` (
`id` bigint(20) NOT NULL,
`pk_userId` bigint(20) DEFAULT NULL,
`relative` varchar(20) DEFAULT NULL COMMENT '1=配偶关系 0=其他关系',
`name` varchar(20) DEFAULT NULL COMMENT '姓名',
`dr` int(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
用户表
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL,
`dr` int(1) DEFAULT NULL COMMENT '删除标示',
`name` varchar(20) DEFAULT NULL,
`phone` varchar(11) DEFAULT NULL,
`flag` smallint(6) DEFAULT NULL COMMENT '配偶标示0 没有 1 有',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
触发器逻辑:update 这个配偶表的时候
dr = 1 删除这个配偶 触发用户表是否有配偶字段更新为0
dr = 0 的时候 触发用户表配偶字段为1 所以建立触发器语句如下。
- 建立触发器
DELIMITER $$
CREATE
TRIGGER `upd_info` AFTER UPDATE ON `tb_mate`
FOR EACH ROW BEGIN
IF(new.relative = 1)
THEN
UPDATE tb_user SET flag = !new.dr
WHERE id = new.pk_userId;
END IF;
END;
总结:根据实际测试不管insert update、(after\before) 触发器都和事务有关系。当你代码有错误关联触发器也会回滚。