微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用触发器让sqlserver和mysql同步

任务: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代码如下 

  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代码 如下:.....待续


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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐