不同数据库间两表同步的问题

fyming 2012-08-29 11:54:41
SQL2005中,DB1和DB2两个数据库,分别有表T1和T2,表结构完全相同。现在想在T1的F2字段所做的修改,在T2表也能同步表现出来;反之也一样,T2中的F2字段所做的UPDATE,T1也同步现在出来。如何实现?

曾经想过用触发器,分别建在DB1.T1.F2和DB2.T2.F2上, 但问题是,当DB1.T1.F2触发引起DB2.T2.F2的UPDATE后,它不是停止了,而是由于在DB2.T2.F2上也建了触发器,它会反过来又触发建在DB1.T1.F2上触发器。最终形成一个死循环。
-------------------------
如何解决这个问题?即由别的触发器引发的UPDATE完成后,即使本字段也建有触发器,也不再引发触发器。只有本字段手工更新引发的触发器,才执行。
...全文
89 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生无悔 2012-08-29
  • 打赏
  • 举报
回复

--像以下这种情况,才属于递归触发,你的两表相互更新,是不属于这种情况的
if object_id('t') is not null drop table t;
go
create table t(col int)
insert into t values(1)
go
create trigger t_upd
on t
for update
as
update t set col='1'
go
update t set col='2'
xiaoxiangqing 2012-08-29
  • 打赏
  • 举报
回复
互相更新比较复杂
人生无悔 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
设置不能嵌套触发起就可以


哪儿设置?
[/Quote]
数据库,属性选项里有的,默认就是不会递归触发,但这样设置应该也不可以的,因你的表条件不符合
这个试下就知道了
人生无悔 2012-08-29
  • 打赏
  • 举报
回复
这个很简单,在表T1,T2中加个列R
当T1表改动时,update T2 set R=1,...
T2的触发器中,如果R=1,更新为R=0然后退出,不执行更新T1表,否则更新T1表
同理T1的触发器也这样做就可以了
  • 打赏
  • 举报
回复
可否在T1和T2之前再建一个中间表T3(加个flag字段,表示是T1还是T2更新的,再加一个更新时间字段),然后对T1和T2各建触发器,若有数据更新,则将更新的数据写入T3,
最后再写个SQL JOB去monitor T3,根据数据去判断需要更新哪个表,更新完后删除T3里的数据。
fyming 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
设置不能嵌套触发起就可以
[/Quote]

哪儿设置?
昵称被占用了 2012-08-29
  • 打赏
  • 举报
回复
设置不能嵌套触发起就可以
fyming 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
这个很简单,在表T1,T2中加个列R
当T1表改动时,update T2 set R=1,...
T2的触发器中,如果R=1,更新为R=0然后退出,不执行更新T1表,否则更新T1表
同理T1的触发器也这样做就可以了
[/Quote]

怎样写?
IF db2.dbo.t2.r=1
BEGIN
SET db2.dbo.t2.r=0
RETURN
END
UPDATE db1.dbo.t1
set db1.dbo.t1.r=1
……
------------------------------
这样写不对啊
本课程深入MySQL 分库分表各个环节,2023年最新课程。每个章节都会以原理深入+实际案例进行讲解。内容数据库安装,主从同步,和分表分表详解和对应的应用场景及注意事项MySQL在金融互联网行业的企业级安装部署1 安装方式2 安装用户3 目录规范4 操作系统配置5 创建用户6 创建目录7 安装8 配置文件9 安装依赖包10 配置环境变量11 初始化数据库12 重置密码 主从复制,gtid,并行复制_半同步复制_实操案例_常用命令_故障处理1 主从复制原理深入讲解2 主从复制相关参数3 主从复制架构部署4 从库状态详解5 过滤复制6 什么是GTID?7 GTID主从配置8 gtid维护9 GTID的特点10 工作原理11 gtid相关状态行和变量 MySQL分库分表目录章节1.MyCAT分布式架构入门及双主架构1.1 主从架构1.2 MyCAT安装1.3 启动和连接1.4 配置文件介绍2.MyCAT读写分离架构2.1 架构说明2.2 创建用户2.3 schema.xml2.4 连接说明2.5 读写测试2.6 当前是单节点3.MyCAT高可用读写分离架构3.1 架构说明3.3 schema.xml(配置)3.4 文件详解3.4.1 schema标签3.4.2 table标签3.4.3 dataNode标签3.4.4 dataHost3.4 读写测试3.5 故障转移4.MyCAT垂直分表4.1 架构4.2 新建表4.3 配置mycat4.4 验证6. MyCAT水平分表-取模分片取模分片7. MyCAT水平分表-枚举分片枚举分片字符枚举配置执行计划的分析8. MyCAT全局表与ER表全局与ER表8.1 全局表8.1.1 特性8.1.2 建表8.1.3 配置8.1.4 验证8.1.5 分析总结(执行计划)8.2 ER表8.2.1 特性8.2.2 建表8.2.3 配置8.2.4 测试验证,子表是否跟随父表记录分片8.2.5 分析总结(执行计划)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧