当前位置:网站首页>【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;
边栏推荐
- 六月 致 -.-- -..- -
- Finished product upgrade program
- 手把手教你CSP系列之script-src
- SAP UI5 ensures that the control id is globally unique implementation method
- 存储资源盘活系统助力新基建
- Storage resource activation system to help new infrastructure
- 奥拉时钟芯片生成配置文件脚本
- Industrial CCD and CMOS camera
- T+Cloud: A "Smart Company" for Building New Business Social Networks and Marketing Relationships
- 使用.NET简单实现一个Redis的高性能克隆版(二)
猜你喜欢

Use "green computing" technology to promote sustainable development of computing power

重构指标之如何监控代码圈复杂度

【Attention 演变史】RNN的产生、架构、推广、问题(第一弹)
Force KouTi (5), the longest text string back

In July 2022, domestic database memorabilia
力扣题(5)—— 最长回文子串

seata源码解析:seata server各种消息处理流程

性能测试流程

基于HDF的LED驱动程序开发(2)

【ASP.NET Core】 中间件
随机推荐
小软件大作用 | 如何省时省力进行Gerber图层快速对比?
How to add custom syntax to MySQL?
Regular expression is incomplete
红外图像滤波
Yuanguo chain game system development
T+Cloud: A "Smart Company" for Building New Business Social Networks and Marketing Relationships
六月 致 -.-- -..- -
电脑一键重装系统后连不上远程了?教你设置的方法
Dragoma (DMA) Metaverse System Development
c sqlite...
seata源码解析:seata server各种消息处理流程
「 WAIC 2022 · 黑客马拉松」蚂蚁财富两大赛题邀你来战!
Seata source code analysis: various message processing processes of seata server
ELECTRA:Pre-training Text Encoders as Discriminators Rather Than Generators
getBoundingClientRect
MySQL远程备份策略举例
面试官:JVM运行时数据区包含哪几部分?作用是啥?
奥拉时钟芯片生成配置文件脚本
Kubernetes之list-watch机制
Finished product upgrade program