当前位置:网站首页>【SQL】触发器同步表数据
【SQL】触发器同步表数据
2022-08-04 19:43:00 【梦想blog】
需求:国家表新增-更新-删除,省份表同步更新。
写代码的话也可以做,但是某些情况直接操作数据库,就会导致数据不一致。
注意:只能单项同步,不能双向同步,否则可能导致死循环。
国家表
CREATE TABLE `addrcountry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fk_addrcontinents` int(11) DEFAULT NULL,
`code` varchar(1000) DEFAULT NULL,
`createtime` datetime DEFAULT NULL,
`modifytime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`fk_user_create` int(11) DEFAULT NULL,
`fk_user_modify` int(11) DEFAULT NULL,
`isvalid` int(11) DEFAULT NULL
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB COMMENT='国家表';
省份表
CREATE TABLE `addrprovince` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fk_addrcountry` int(11) DEFAULT NULL,
`code` varchar(50) DEFAULT NULL,
`createtime` datetime DEFAULT NULL,
`modifytime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`fk_user_create` int(11) DEFAULT NULL,
`fk_user_modify` int(11) DEFAULT NULL,
`isvalid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB COMMENT='省份表';
触发器
在触发器里面有两个关键字 old 和 new,new 表示新数据,old 表示老数据。
新增 + 更新 + 删除。
DROP TRIGGER IF EXISTS `sync-addrprovince-insert`;
DROP TRIGGER IF EXISTS `sync-addrprovince-update`;
DROP TRIGGER IF EXISTS `sync-addrprovince-delete`;
CREATE TRIGGER `sync-addrprovince-insert` AFTER INSERT ON `addrcountry` FOR EACH ROW
BEGIN
INSERT INTO `addrprovince`
(
`id`,
`fk_addrcountry`,
`code`,
`createtime`,
`modifytime`,
`fk_user_create`,
`fk_user_modify`,
`isvalid`
)
SELECT
`id`,
`id` AS `fk_addrcountry`,
`code`,
`createtime`,
`modifytime`,
`fk_user_create`,
`fk_user_modify`,
`isvalid`
FROM `addrcountry`
WHERE `id` = new.`id`;
END;
CREATE TRIGGER `sync-addrprovince-update` AFTER UPDATE ON `addrcountry` FOR EACH ROW
BEGIN
UPDATE `addrprovince` t1 SET
t1.`id` = new.`id`,
t1.`fk_addrcountry` = new.`id`,
t1.`code` = new.`code`,
t1.`createtime` = new.`createtime`,
t1.`modifytime` = new.`modifytime`,
t1.`fk_user_create` = new.`fk_user_create`,
t1.`fk_user_modify` = new.`fk_user_modify`,
t1.`isvalid` = new.`isvalid`
WHERE t1.`id` = old.`id`;
END;
CREATE TRIGGER `sync-addrprovince-delete` AFTER DELETE ON `addrcountry` FOR EACH ROW
BEGIN
DELETE FROM addrprovince WHERE id = old.id;
END;
边栏推荐
猜你喜欢
量化交易机器人系统开发
[Sql brush topic] Query information data--Day1
带你了解数据分布式存储原理
《支付宝体验设计精髓》一书,跟测试相关性知识记录
Use "green computing" technology to promote sustainable development of computing power
Highlights of some performance tests
Video Object Detection
NLP技术为何在工业界这么卷?前沿案例解析来了
按需视觉识别:愿景和初步方案
高效目标检测:动态候选较大程度提升检测精度(附论文下载)
随机推荐
[Latest Information] 2 new regions will announce the registration time for the soft exam in the second half of 2022
Highlights of some performance tests
Defaced Fingerprint Recovery and Identification
Query the published version records of the APP Store
really time ntp服务启动命令
正畸MIA微种植体支抗技术中国10周年交流会在沈举办
hash和history路由的区别
华为企业组网实例:VRRP+MSTP典型组网配置
元国度链游系统开发
零基础做出高端堆叠极环图
奥拉时钟芯片生成配置文件脚本
性能测试流程
How to use the Chrome DevTools performance tab
PG网络传输安全SSL介绍及使用示例
如何推动乡村振兴的落地
MYSQL获取数据库的表名和表注释
A complete cross-compilation environment records the shell scripts generated by peta
c sqlite ... ...
SIGIR 2022 | 邻域建模Graph-Masked Transformer,显著提高CTR预测性能
awk 统计差值记录