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

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

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

这是我写的一个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 ; 

update + inner join

http://www.cnblogs.com/luluping/archive/2009/05/21/1486549.html

 update A set A.status='xxx' from A inner join B on A.no=B.no

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

  1. tableB有存在的必要吗? 完全是冗余的。 使用view也好啊。
  2. 实在想要tableB的话,更新tableA时,同事更新tableB,不就可以了吗? 干嘛给自己找麻烦。

我写了一下,是通过在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;

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