sql数据库表与表的同步
‘壹’ sql如何将两个表里的数据同步
可以通过sql触发器来实现。
例下列触发器代码 :
createtriggertri_kszb_insert
onygpx_kszb--操作的表名
forinsert--给表插入一条数据的时候触发
as
declare@kssjdatetime
declare@sqbhchar(40)
select@kssj=kssj,@sqbh=sqbhfrominserted--把插入的数据的保存到变量
insertintoygpx_kszb2values(@kssj,@sqbh)--同步插入到另一表
以上触发器可以实现,在表ygpx_kszb中插入数据,同步插入到表ygpx_kszb2 。
触发器还可以针对表的insert,delete, update 操作时安装要求执行数据同步的操作,即可实现两个表里的数据同步。
‘贰’ 如何实现两个SQL数据库的同步操作
sql同步使用dblink同步数据。
具体参考实例:
1、在win下创建linux的DBLINK
a.查看linux下的tnsnames.ora文件
[oracle@myrac1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /s01/app/oracle/proct/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
HJJ =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myrac1.oracle.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hjj)
)
)
b.创建dblink
SQL> create database link win_lin_link connect to hjj identified by xxxx
2 using '(DESCRIPTION =
3 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.171)(PORT = 1521))
4 (CONNECT_DATA =
5 (SERVER = DEDICATED)
6 (SERVICE_NAME = hjj)
7 )
8 )'
9 /
Database link created.
2.在win下创建trigger
SQL> create or replace trigger trig_win_emp
2 after insert on emp
3 for each row
4 begin
5 insert into emp@win_lin_link values(:new.empno,:new.empname,:new.empsalary);
6 end;
7 /
Trigger created.
3.测试
4.结果
win下插入数据
SQL> insert into emp values('E001','LYN',2300);
1 row created.
SQL>COMMIT;
Commit complete.
SQL> select *from emp;
EMPNO EMPNAME EMPSALARY
---------------------------------------- ---------------------------------------- ----------
E001 LYN 2300
SQL> select * from emp@win_lin_link;
EMPNO EMPNAME EMPSALARY
---------------------------------------- ---------------------------------------- ----------
E001 LYN 2300
linux下查看数据
SQL> select * from emp;
EMPNO EMPNAME EMPSALARY
-------------------- -------------------- ----------
E001 LYN 2300
‘叁’ sql中如何实现两张表的数据同步
用触发器,在增加,删除,修改时操作另一个表,使其数据和该表同步;
‘肆’ MSSQL 同一服务器不同数据库间表数据同步,有什么好的方法,分两种吧,即时的和延迟的
同一服务器的不同数据库间可以直接访问,比如两个数据库DB1,DB2
当前连接的是DB1,可以用 select * from db2.dbo.table1 来访问DB2的表。 其中dbo是数据库所有者,默认为dbo。 还需要连接DB1的用户对两个数据库都有权限。
关于同步,延迟的方法比较单一,做一个存储,加在作业里,定时调用即可。
即时的可以分两种思路,第一可以用触发器的方式,在db1中需要同步的表里,创建触发器,当有数据操作的时候触发,同步数据。
第二种思路,是前台事务操作db1的数据表的时候,同时写db2的数据表,两个操作放在同一个事务中。
两种方法各有好处,个人推荐第一种。
以上思路基于sql server 2005,之后的版本了解不够多,不知道有没有出什么更好的工具啥的。
‘伍’ sql数据库中如何做到表与表之间字段的同步更新删除
使用外键!!将要同步的2个表进内的字段进行连接。前提要将两个表中的字段设为主键或唯一建。详情请查询书中的关于外键的描述!!
‘陆’ SQL 如何使两张表同步
begin
for ind in (select distinct id
from A
where biao=0)
loop
insert into B values(ind.id,0);
update A
set biao=0
where id = ind.id;
commit;
end loop;
end;
/
‘柒’ sql如何将两个表里的数据同步
使用 merge into。
‘捌’ sql2000 在同一个数据库一张表的修改,同步到另一张表。
可以建触发器来实现:
更新
Create
Trigger
truTable1
On
表1
for
Update
-------------------------------------------------------
--Memo
:
临时写写的,给你作个Sample。没有调试阿。
-------------------------------------------------------
As
Update
表2
Set
表2.Name=i.username
,表2.CardID=i.usercardno
From
表2
,
Deleted
d
,Inserted
i
表2.CardID=d.usercardno
and
d.userstate
=
'0'
删除
Create
trigger
trdTable1
On
表1
for
Delete
-------------------------------------------------------
--Memo
:
临时写写的,给你作个Sample。没有调试阿。
-------------------------------------------------------
As
Delete
表2
From
表2,
Deleted
d
Where
表2.CardID=d.usercardno
and
d.userstate
=
'0'
【有疑问可以HI我,或追问,但请不要关闭问题,谢谢!】
‘玖’ 在SQL中 如何实现不同数据库的两张表的同步
你可以分三个来写,分别用来监视insert\delete\update三个(这样写容易完成),我下面写一个,你其它有可以参照下面这个来写
--插入行的情况
CREATE TRIGGER [填入触发器名] ON [dbo].[表名]
FOR INSERT
AS
insert [另外一个数据库名].[dbo].[表名] select * from inserted
你也可以参照料我下面这段,写在一起,但比较麻烦,我就不具体按你要求的写了罗.
CREATE trigger [数据库A.tr_user] on [user]
/* 触发器 在数据库A的user表建立一个名字tr_user的触发器 */
for update,insert,delete
/*监视 修改 插入 删除*/
as
if not exists (select * from deleted)
/* 如果deleted表为空,那么 */
insert 数据库B..[user](username,userpass,landtime) select username,password,lastlogin from inserted
/* 将inserted表(就是对于触发器来说刚刚被插入的集合)插入到B.user */
else if not exists (select * from inserted)--删除
/* 否则 如果 inserted集合为空 */
delete 数据库B..[user] where id in (select userid from deleted)
/* 那么删除B.user下id是deleted集合中出现的id 这里用了in */
else--更新
update [user]
set
[user].username=i.username,
[user].userpass=i.password
from 数据库B..[user] as [user],
inserted as i
where [user].id=i.userid
/* update就很明显了,凡是updated的都来更新,保持一样就可以了 */
alter table 数据库B..[user] ENABLE TRIGGER [数据库B.tr_user]
‘拾’ SQL两个数据库间的数据同步
建议使用ETL工具实现,你可以使用kettle,可以实现数据库之间的数据同步。完全可视化操作。
你可以网络一下资料。