Mysql触发器实现两表同步

触发器

触发器是(trigger)是个特殊的存储你过程,它的执行不是由程序调用,也不是手动启动,而是由事件来触发,比如当对一个表进行操作(INSERT,DELETE,UPDATE)时就会激活它执行。触发器经常 用来加强数据的完整性约束和业务规则等。触发器可以从DBA_TRIGGERS, USER_TRIGGES数据字典中查到。
触发器语法

CREATE TRIGGER
trigger_name 
TRIGGER_TIME[AFTER,BEFORE] 
TRIGGER_EVENT[UPDATE,INSERT,DELETE]
ON tbl_name
FOR EACH ROW trigger_stmt

触发器实现两表同步

#同步插入
DELIMITER $$ #修改定界符
DROP TRIGGER IF EXISTS sync_apps_insert$$
CREATE TRIGGER sync_apps_insert AFTER INSERT ON rht_train.rht_apps FOR EACH ROW
BEGIN
INSERT INTO rht_idc.rhi_apps 
(id, appid, appname, isreward, adesc, adetail, price, downcount, sortid, iftj, flag, apptype, appcol, imgurl, ver, vernum, iconurl, filesize, lang, appurl, package, ctime, utime, stars, signature, unconfirm, develop, typeinfo) VALUES 
(NEW.id, NEW.appid, NEW.appname, NEW.isreward, NEW.adesc, NEW.adetail, NEW.price, NEW.downcount, NEW.sortid, NEW.iftj, NEW.flag, NEW.apptype, NEW.appcol, NEW.imgurl, NEW.ver, NEW.vernum, NEW.iconurl, NEW.filesize, NEW.lang, NEW.appurl, NEW.package, NEW.ctime, NEW.utime, NEW.stars, NEW.signature, NEW.unconfirm, NEW.develop, NEW.typeinfo);
END $$
DELIMITER ; #还原定界符


#同步删除
DELIMITER $$ #修改定界符
DROP TRIGGER IF EXISTS sync_apps_delete$$
CREATE TRIGGER sync_apps_delete AFTER DELETE ON rht_train.rht_apps FOR EACH ROW
BEGIN
DELETE FROM rht_idc.rhi_apps WHERE rht_idc.rhi_apps.id=OLD.id;
END $$
DELIMITER ; #还原定界符


#同步更新
DELIMITER $$ #修改定界符
DROP TRIGGER IF EXISTS sync_apps_update$$
CREATE TRIGGER sync_apps_update AFTER UPDATE ON rht_train.rht_apps FOR EACH ROW
BEGIN
UPDATE `rht_idc`.`rhi_apps` SET `id`=NEW.id, `appid`=NEW.appid, `appname`=NEW.appname, 
`isreward`=NEW.isreward, `adesc`=NEW.adesc, `adetail`=NEW.adetail, `price`=NEW.price, `downcount`=NEW.downcount, 
`sortid`=NEW.sortid, `iftj`=NEW.iftj, `flag`=NEW.flag, `apptype`=NEW.apptype, `appcol`=NEW.appcol, `imgurl`=NEW.imgurl, 
`ver`=NEW.ver, `vernum`=NEW.vernum, `iconurl`=NEW.iconurl, `filesize`=NEW.filesize, `lang`=NEW.lang, `appurl`=NEW.appurl, 
`package`=NEW.package, `ctime`=NEW.ctime, `utime`=NEW.utime, `stars`=NEW.stars, `signature`=NEW.signature,
`unconfirm`=NEW.unconfirm, `develop`=NEW.develop, `typeinfo`=NEW.typeinfo WHERE (rht_idc.rhi_apps.id=OLD.id);
END $$
DELIMITER ; #还原定界符

如果执行返回

Trigger in wrong schema

请检查use datebases 是否是rht_train。触发器是建立在此库上的表,应当选择此库才能正常建立。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • 触发器 MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用...
    FTOLsXD阅读 991评论 0 1
  • MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,...
    金星show阅读 856评论 0 3
  • “你赠我鲜花一朵 我许你半世情缘 ” 煊笨蛋,生日快乐 又到了你的生日 想一...
    BelovedChen阅读 4,979评论 0 0
  • 兰姐值得赞, 辛苦人人见。 油坊经营好, 人气往上窜。
    简村小吹阅读 208评论 14 15