当前位置:网站首页>【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;
边栏推荐
猜你喜欢
指静脉识别-matlab
Query the published version records of the APP Store
重构指标之如何监控代码圈复杂度
Defaced Fingerprint Recovery and Identification
JS new一个构造器发生了什么?从零手写一个new方法
蚂蚁集团时序数据库CeresDB正式开源
【Attention 演变史】RNN的产生、架构、推广、问题(第一弹)
Video Object Detection
SIGIR 2022 | 邻域建模Graph-Masked Transformer,显著提高CTR预测性能
ELECTRA:Pre-training Text Encoders as Discriminators Rather Than Generators
随机推荐
《学会写作》粥佐罗著
[Sql刷题篇] 查询信息数据--Day1
Jmeter - Heap配置原因报错Invalid initial heap size: -Xms1024m -Xmx2048mError
ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators
Finger Vein Recognition-matlab
Differences in the working mechanism between SAP E-commerce Cloud Accelerator and Spartacus UI
AWS SES 的监控和告警
The Development and Current Situation of Object Detection
How to add custom syntax to MySQL?
IIC驱动OLED
The establishment of simple data cache layer
【Attention 演变史】RNN的产生、架构、推广、问题(第一弹)
正则表达式未完
二叉树的遍历
JS手写JSON.stringify() (面试)
NLP技术为何在工业界这么卷?前沿案例解析来了
备忘录模式
openharmony代码框架初识(2)
Chrome 开发者工具 performance 标签页的用法
v-model的使用