加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

用触发器让sqlserver和mysql同步

发布时间:2020-12-12 13:54:50 所属栏目:MsSql教程 来源:网络整理
导读:任务: sqlsever中有表A,MySql中有表B。表A和表B结构一样但不在同一台机器上。要求实现当A中的数据有增删改操作时,在B中进行同样的操作 。 方案一 (已实现):每天定时删除B表再把A表全部复制到A表,http://www.voidcn.com/article/p-edcqlrub-bks.html。

任务:sqlsever中有表A,MySql中有表B。表A和表B结构一样但不在同一台机器上。要求实现当A中的数据有增删改操作时,在B中进行同样的操作

方案一(已实现):每天定时删除B表再把A表全部复制到A表,http://www.voidcn.com/article/p-edcqlrub-bks.html。这个方案,不论从效率和用户体验上讲都很糟糕,因为数据量比较大有16W左右,但每天改变的就1k条左右。

方案二:?触发器+程序代码。?思路:在A表上建触发器,把A变中改变(增加,修改)的数据保存在一张中间表C中。然后用C表去更新B表,没有的数据加入,已存在的数据则修改。当A表中删除数据时,将删除的数据保存在中间表D中,通过主键的唯一,用D表中数据去删除B表中的数据。

sql代码如下?

[sql]? view plain copy
  1. --查看触发器??
  2. select?*?from?sysobjects?where?xtype='TR'??
  3. --------------------------------------??
  4. --新增数据触发器??
  5. if?object_id('tr_insert','tr')is?not?null??
  6. drop?trigger?tr_insert??
  7. go??
  8. create? on?dc_member??
  9. for?insert??
  10. as??
  11. begin??
  12. ????--?插入新数据触发??
  13. ????if(object_id('temp_table','U')?null)????--如果中间表存在??
  14. ????insert?into?temp_table?from?inserted??
  15. ????else??
  16. ??
  17. ?????
  18. end??
  19. -----------------------------------------??
  20. --修改数据的触发器??
  21. if?object_id('tr_update',153); background-color:inherit; font-weight:bold">trigger?tr_update??
  22. update??
  23. --?修改新数据触发??
  24. null)??
  25. ???--?insert?into?temp_table?select?*?from?inserted??
  26. ???update?temp_table??
  27. set?names=i.names,sex=i.sex,telephone=i.telephone,address1=i.address1,??
  28. ?????pmdate=i.pmdate,expiry=i.expiry,levels=i.levels,dbno=i.dbno,hispoints=i.hispoints,??
  29. ????bnpoints=i.bnpoints,kypoints=i.kypoints,wxno=i.wxno,remark=i.remark??
  30. from?inserted?i,?temp_table?tt??
  31. where?tt.pmcode=i.pmcode????
  32. from?inserted????
  33. --删除数据的触发器??
  34. if?object_id('tr_del',128); background-color:inherit">null??
  35. trigger?tr_del??
  36. go??
  37. on?dc_member??
  38. delete??
  39. as??
  40. begin??
  41. ????--?删除新数据触发??
  42. ????if(object_id('temp_table_del',128); background-color:inherit">null)??
  43. into?temp_table_del?from?deleted??
  44. else??
  45. from?deleted????
  46. end??

问题:以前处理大量数据是分段+多线程,现在处理这个有必要用多线程吗?用多线程会出现什么问题?....先把问题解决了再说

处理该业务的java代码 如下:.....待续


方案三: 寻找成熟的数据库同步技术

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读