liberty-
2015-06-04 02:45
采纳率: 50%
浏览 2.8k

SQL 同步tableA和tableB两张表的信息

tableA(no,name1,status,time)和tableB(no,name1)
no为主键
A表要同步B表的数据,status记录改信息是“新增”或者“修改”或者“删除”
time为新增或修改或删除的时间

这个SQL要怎么写 ?求具体的语句啊谢谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • JonsonJiao 2015-06-05 07:47
    已采纳

    这是我写的一个sql文件,你保存成sql文件可以试试。

    DELIMITER $$ 
    INSERT INTO tablea (SELECT tableb.no,tableb.`name`,'Add',tableb.time from tableb WHERE no NOT IN (SELECT no from tablea));
    
    UPDATE tablea INNER JOIN tableb SET status = 'Update', tablea.name=tableb.name, tablea.time = tableb.time WHERE tablea.no = tableb.no AND tablea.name != tableb.name;
    
    UPDATE tablea INNER JOIN tableb SET status = 'DEL', tablea.time = NOW() WHERE tablea.no NOT IN (SELECT no FROM tableb);
    
    $$  
    DELIMITER ; 
    
    点赞 打赏 评论
  • bdmh 2015-06-04 02:46
    点赞 打赏 评论
  • bdmh 2015-06-04 02:48
     update A set A.status='xxx' from A inner join B on A.no=B.no
    
    点赞 打赏 评论
  • JonsonJiao 2015-06-04 03:03

    建议楼主再把需求明确一些,既然你这个涉及了增加、删除、更新三个操作的时间,应该设计一个触发器,在你对B表进行增删改操作时触发,并将这些信息存储到A表中,这是我的理解,不知道是不是你的需求,是的话我再给你触发器的代码

    点赞 打赏 评论
  • nblover 2015-06-04 03:07
    1. tableB有存在的必要吗? 完全是冗余的。 使用view也好啊。
    2. 实在想要tableB的话,更新tableA时,同事更新tableB,不就可以了吗? 干嘛给自己找麻烦。
    点赞 打赏 评论
  • JonsonJiao 2015-06-04 05:58

    我写了一下,是通过在B表加触发器的方式实现的。请参考:

    创建增加的触发器:

    CREATE TRIGGER tableb_add 
    AFTER INSERT ON tableb
    FOR EACH ROW
    BEGIN
         insert into tablea values(new.no,new.name,'Add',NOW());
    END;
    

    //测试代码

    insert into tableb values(1,'sss');
    

    创建更新的触发器:

    CREATE TRIGGER tableb_update 
    AFTER UPDATE ON tableb
    FOR EACH ROW
    BEGIN
         UPDATE tablea set name=new.name, status='Update', time=NOW() where no = new.no;
    END;
    

    //测试代码

    update tableb set name='new' where no=1;
    

    创建删除的触发器:

    CREATE TRIGGER tableb_delete
    AFTER DELETE ON tableb
    FOR EACH ROW
    BEGIN
         UPDATE tablea set status='Delete', time=NOW() where no = old.no;
    END;
    

    //测试代码

    delete from tableb where no =1;
    
    点赞 打赏 评论
  • 鱼弦 2015-06-05 03:10

    1、使用sql 脚本写触发器,一般都是 增删改查 那几个操作 用 触发器trigger的;
    2、多表 级联 一样可以 使得多表 的 同步 更新变化;
    3、在代码中使用 多线程 信号 也可以

    点赞 打赏 评论

相关推荐 更多相似问题