mysql 表同步_MySQL实现两张表数据的同步方法总结

下面我们来看一篇关于MySQL实现两张表数据的同步方法总结,希望这篇文章能够帮助到各位朋友,有兴趣的朋友可以进来看看吧。

有两张表A和B,要求往A里面插入一条记录的同时要向B里面也插入一条记录,向B里面插入一条记录的同时也向A插入一条记录。两张表的结构不同,需要将其中几个字段对应起来。可以用下面的触发器实现。

表A的触发器:

begin

set @disable=1;

if @disable=1 and NOT EXISTS(SELECT 1 FROM tableB where ID=new.ID) then

insert into tableB (ID,对应字段1) values(new.ID,new.对应字段1);

end if;

set @disable=0;

end

表B的触发器:

begin

set @disable=1;

if @disable=1 and NOT EXISTS(SELECT 1 FROM tableA where ID=new.ID) then

insert into tableA (ID,对应字段1) values(new.ID,new.对应字段1);

end if;

set @disable=0;

end

mysql通过触发器实现两个表的同步

目前,在本地测试成功。

假设本地的两个数据库a和b,a下有表table1(id, val) b下有表table2(id, val)

假设希望当table1中数据更新,table2中数据同步更新。

代码:

DELIMITER $$

CREATE

/*[DEFINER = { user | CURRENT_USER }]*/

TRIGGER `a`.`触发器名` BEFORE UPDATE

ON `a`.`table1`

FOR EACH ROW BEGIN

IF new.id!=old.id THEN

UPDATE `b`.`table2` SET `b`.`table2`.id=new.id WHERE `b`.`table2`.val=old.val;

END IF;

END$$

DELIMITER ;

网上找了很多代码,在phpadmin中运行都不成功,总是语法错误,phpmyadmin也不能可视化建立触发器,所以找了另一个mysql管理工具,SQLyog。这个工具比较好,java写的,可以通过界面创建触发器,然后再把代码拷到phpmyadmin中运行,成功!

分别创建增加、删除、更新的触发器(Trigger)来达到两张表之间数据同步的目的。

1:数据同步增加:

如有两张表——A表和B表,创建触发器使当A表插入数据后B表也同步插入数据。其中B表插入数据的字段需要同A表中的字段相对应。

CREATE TRIGGER 触发器名称

ON A表

AFTER INSERT

AS BEGIN INSERT INTO

B表(B表字段1,B表字段2,B表字段3)

SELECT A表字段1,A表字段2,A表字段3

FROM INSERTED

END

2.数据同步删除:

如有两张表——A表和B表,创建触发器使当A表删除数据后B表也同步删除数据。其中B表与A表应有相应主键关联。

CREATE TRIGGER 触发器名称

ON A表

AFTER DELETE

AS BEGIN DELETE B表

WHERE

B表主键 IN(

SELECT A表主键

FROM DELETED)

END

3.数据同步更新:

如有两张表——A表和B表,创建触发器使当A表数据更新后B表也同步更新数据。

CREATE TRIGGER 触发器名称

ON A表

AFTER UPDATE

AS

update B表

SET

B.B表字段1=A.A表字段1

FROM

B表 AS B,INSERTED AS A

WHERE B.B表主键=A.A表主键

理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值