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表中,这是我的理解,不知道是不是你的需求,是的话我再给你触发器的代码
我写了一下,是通过在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、在代码中使用 多线程 信号 也可以