如何判断mysql数据库的记录已被更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断mysql数据库的记录已被更新相关的知识,希望对你有一定的参考价值。

我想做两个数据库的同步,将mysql数据库的内容同步至sqlserver, 由于表很多,数据量也很大,如果每次都全部复制,需要的时间太长,大家有没有很好的办法来解决,我的初步设想是通过mysql的日志来更新,可是我发现mysql的日志遇到中文都是乱码。另外要说明的是:mysql在windows和linux服务器上都有。

如果binlog日志更新的话,则数据库一定会更新,只要监控binlog就可以。
中文乱码,应该是字符集(或者是校验字符集)的问题,可以更改一下试试。
mysql和sqlserver有很多地方不同,最好不要做异构同步,听说SyncNavigator这个工具可以做到异构数据库同步,你可以尝试一下。追问

终于看到靠谱的回答了。我调整了数据库的字符集也不见效,SyncNavigator这个工具对源数据的要求太严格,不是太好用。

追答

可以先将字符集转换为和数据库相同的字符集,然后再导入。

最后binlog日至要用mysqlbinlog打开,有些地方不能显示为字符串(可以理解的那种)是因为那个地方使用二进制记录的。如果你的日至格式是row那么,应该全部都是不能正常显示的字符集

参考技术A 可以考虑使用触发器,当表记录有变化的话,把表名,id,写到一个表中,然后定时轮询这个表进行同步操作。---是个歪主意,看你的使用场景了。追问

触发器,会造成很多问题,考虑过,难道没有一种解析日志的方法吗?

mysql 无数据插入,有数据更新

mysql的语法与sql server有很多不同,sql server执行插入更新时可以update后使用if判断返回的@@rowcount值,然后确定是否插入,mysql在语句中无法使用类似sql server的@@rowcount,但是有另外一些方式也能达到无数据插入,有数据更新的目的:

 

1、REPLACE相当于如果数据存在,先按主键删除原记录后再添加记录新记录,此方式会更新索引

 

REPLACE INTO t_param (param_name,param_value) 
select #{paramName}, #{paramValue}

 

2、ON DUPLICATE KEY UPDATE 先更新数据,如果数据不存在时进行insert

 

insert into t_param (param_name, param_value) values (#{paramName}, #{paramValue})
ON DUPLICATE KEY 
UPDATE param_name = #{paramName},param_value = #{paramValue}

 

3、判断需要插入的数据是否存在,如果不存在时就插入,否则直接执行更新

 

INSERT INTO t_param (param_name,param_value) SELECT #{paramName},#{paramValue} FROM DUAL 
WHERE NOT EXISTS (SELECT param_value FROM t_param WHERE param_name = #{paramName});
UPDATE t_param SET param_value = #{paramValue} WHERE param_name = #{paramName}

 

以上是关于如何判断mysql数据库的记录已被更新的主要内容,如果未能解决你的问题,请参考以下文章

处理具有数百万条记录更新和大量读数的 MySQL 表的最佳方法

如何在 MySQL 中获取记录数以及最小值/最大值?

MySQL中如何合并结构和记录数都不同的两个表?

mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入

如何判断 MySQL 表上次更新的时间?

mysql 无数据插入,有数据更新