MySQL怎样实现两张表的同步

k_c_u_f 2016-08-06 03:30:21
有两张表A和B,要求往A里面插入一条记录的同时要向B里面也插入一条记录,向B里面插入一条记录的同时也向A插入一条记录。两张表的结构不同,只需要将其中几个字段对应起来。
用触发器只能实现一张表的新记录向另一张表里面插入,不能实现相互插入。有什么办法能够实现相互插入?
...全文
293 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
k_c_u_f 2016-08-06
  • 打赏
  • 举报
回复
引用 3 楼 roy_88 的回复:
你不改动程序和接口的情况下,只能用触发器 这样用,刚试了个例子
drop table if exists ttab1,ttab2;

CREATE TABLE TTab1(ID INT UNIQUE,Name NVARCHAR(50));
CREATE TABLE TTab2(ID INT UNIQUE,Name NVARCHAR(50));

truncate table TTab1;
truncate table TTab2;

drop trigger if exists tr_TTab1;
drop trigger if exists tr_TTab2;

delimiter || 
create trigger tr_TTab1 after insert on TTab1
for each row
begin
set @disable=1;
if @disable=1 and NOT EXISTS(SELECT 1 FROM ttab2 where ID=new.ID) then 	
    insert into TTab2(ID,Name) values(new.ID,new.Name);
end if; 
set @disable=0;
end||

create trigger tr_TTab2 after insert on TTab2
for each row
begin
set @disable=1;
if @disable=1 and NOT EXISTS(SELECT 1 FROM ttab1 where ID=new.ID) then 
	insert into TTab1(ID,Name) values(new.ID,new.Name);
end if; 
set @disable=0;
end||

delimiter ;

#测试新增TTab1
INSERT INTO TTab1
        ( ID, Name )
VALUES  ( 1, -- ID - int
          'Roy1'  -- Name - nvarchar(50)
          );

#测试新增TTab2
INSERT INTO TTab2
        ( ID, Name )
VALUES  ( 2, -- ID - int
          'Roy1'  -- Name - nvarchar(50)
          );


select ID,Name from TTab1;

select ID,Name from TTab2;


          
          

高手!太厉害了!
中国风 2016-08-06
  • 打赏
  • 举报
回复
你不改动程序和接口的情况下,只能用触发器 这样用,刚试了个例子
drop table if exists ttab1,ttab2;

CREATE TABLE TTab1(ID INT UNIQUE,Name NVARCHAR(50));
CREATE TABLE TTab2(ID INT UNIQUE,Name NVARCHAR(50));

truncate table TTab1;
truncate table TTab2;

drop trigger if exists tr_TTab1;
drop trigger if exists tr_TTab2;

delimiter || 
create trigger tr_TTab1 after insert on TTab1
for each row
begin
set @disable=1;
if @disable=1 and NOT EXISTS(SELECT 1 FROM ttab2 where ID=new.ID) then 	
    insert into TTab2(ID,Name) values(new.ID,new.Name);
end if; 
set @disable=0;
end||

create trigger tr_TTab2 after insert on TTab2
for each row
begin
set @disable=1;
if @disable=1 and NOT EXISTS(SELECT 1 FROM ttab1 where ID=new.ID) then 
	insert into TTab1(ID,Name) values(new.ID,new.Name);
end if; 
set @disable=0;
end||

delimiter ;

#测试新增TTab1
INSERT INTO TTab1
        ( ID, Name )
VALUES  ( 1, -- ID - int
          'Roy1'  -- Name - nvarchar(50)
          );

#测试新增TTab2
INSERT INTO TTab2
        ( ID, Name )
VALUES  ( 2, -- ID - int
          'Roy1'  -- Name - nvarchar(50)
          );


select ID,Name from TTab1;

select ID,Name from TTab2;


          
          

k_c_u_f 2016-08-06
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
用1个存储过程封装,通过参数分别插入A/B表
接口已经不能动了,只能通过数据库来实现
中国风 2016-08-06
  • 打赏
  • 举报
回复
用1个存储过程封装,通过参数分别插入A/B表

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧