有TableA 和TableB分别在DB1和DB2中,
现在DB2要定时从DB1的TableA的记录全部insert到TableB,说起来就是先delete掉TableB的记录,然后insert into TableB (select from DB1.TableA)
但问题是TableB有Trigger,会不停在的触发,如果删掉了,trigger就找不到记录会有问题,有没有什么办法让insert动作一次搞定,以前老的记录又要删掉,但不是单独删除?
因TableB没有主键及约束,可重复,所以就是insert后再删除重复记录,但这样还是有问题,因为如果TableA的记录减少了,这个办法又行不通了...
郁闷中。请教~~

解决方案 »

  1.   

    不是很明白楼主的意思,触发器对于表A和表B有某种关联吗?删除表B不想触发可以用truncate table B;不过我觉得你可以在对表B操作数据的时候,先把上面的触发器设置为disable,完了再改回enable
      

  2.   

    触发器是不能设为disable的,因为它一直在查询记录,停掉会有问题产生。
    我的意思是不影响触发器查询,又能保持两个表的一致性。
      

  3.   

    先delete掉TableB的记录,然后insert into TableB (select from DB1.TableA)
    目前看你的情况,必须先disbale trigger,操作完成后再enable trigger的
      

  4.   

    逻辑太混乱了,不知道怎么会有这么怪的处理方式。
    难道就不能不删除b表吗?
    按你说的,只能先truncate table b,在insert了。(就是先截断后插入)换种思路行不
    1、删除不表记录,条件:a表中不存在的
    2、插入b表,条件:b表中不存在的delete from a where not exits(select 1 from b where a.条件=b.条件);
    在对应的写insert
      

  5.   

    1、删除不表记录,条件:a表中不存在的
    ->1、删除b表记录,条件:a表中不存在的
      

  6.   

    建一个B表的临时表,先将数据insert到这个临时表中,然后再truncate掉B表,drop掉B表,再将B表临时表rename成B表,将上面这几步写在程序里,流水化的执行,一秒钟应该就可以完成的事.