- 需求描述
工作遇到一個這樣的需求有兩個表一個是用戶基本信息表裏面有一個字段是是否結婚。一個是家庭關係表裏面有孩子表、配偶表、父母表等與用戶有關係的信息用一個字段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) 觸發器都和事務有關係。當你代碼有錯誤關聯觸發器也會回滾。