你在写数据的时候要看你数据库允许的锁定级别是什么,每种数据库都不一样,如果是最高级别的锁你在写数据的时候其他事务是无法对他进行写 *** 作的,如果是读就会发生 (1)读事务读取的数据不同(2)发生对未提交的更新的依赖。
则读事务在读数据的时候需要申请读锁。建议是你不要通过扫数据库来查找更新,把数据放到内存中通过缓冲区进行交换那样更好
在每个数据库的table1\table2都建立插入、删除、修改触发器
如在A1上
ceate trigger dbotable1_u on A1dbotable1 for insert,update,delete as
IF @@rowcount = 0 RETURN
declare @no_i int -- 假设no为关键字
--declare 其他字段
declare @no_d int -- 假设no为关键字
--declare 其他字段
--赋值
select @no_i =no ,--其他值
from inserted
select @no_d =no ,--其他值
from deleted
--判断@no_d,@no_i 是否在A2,A3,A4,A5的表中存在
--1、如果@no_d,@no_i 都存在,则用新值更新A2,A3,A4,A5的talbe1
--2、如果@no_d不存在@no_i存在,则将新值插入A2,A3,A4,A5的talbe1
--3、如果@no_d存在@no_i不存在,则删除A2,A3,A4,A5的talbe1对应的值
if exists(select 1 from A2dbotalbe1 where no = @no_d) and
exists(select 1 from A2dbotalbe1 where no = @no_i)
begin
--修改A2数据库的表
end
如果是同一个mysql服务端的两个数据库同步可考虑下触发器,如果是不同端口的两个mysql服务端跟在两台服务器同步配置上没有区别。
数据库最好不要做主从,不然性能会降低很多的。
可以采取其他的方法撒,比如分布式存储。可以考虑下memcachedb,实现持久存储。
表结构一致的话,可以考虑映射表去实现来的(shell脚本定时同步,触发器),不过shell脚本会将环境搞的复杂一点,维护也会相对麻烦
映射表具体实现(在要同步的数据库下创建相同的表结构):
CREATE TABLE table_name(
column_name column_type
key
)
ENGINE=MYISAM DEFAULT CHARSET=utf8
CONNECTION="mysql://user:pwd@ip_address/db_name/table_name";
以上就是关于如何实现数据库的同步读写全部的内容,包括:如何实现数据库的同步读写、如何实现多个SQL数据库同样结构的表同步更新!、同一个服务器上两个数据库表怎么同步等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)