如何判断mysql数据库的记录已被更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断mysql数据库的记录已被更新相关的知识,希望对你有一定的参考价值。
我想做两个数据库的同步,将mysql数据库的内容同步至sqlserver, 由于表很多,数据量也很大,如果每次都全部复制,需要的时间太长,大家有没有很好的办法来解决,我的初步设想是通过mysql的日志来更新,可是我发现mysql的日志遇到中文都是乱码。另外要说明的是:mysql在windows和linux服务器上都有。
如果binlog日志更新的话,则数据库一定会更新,只要监控binlog就可以。中文乱码,应该是字符集(或者是校验字符集)的问题,可以更改一下试试。
mysql和sqlserver有很多地方不同,最好不要做异构同步,听说SyncNavigator这个工具可以做到异构数据库同步,你可以尝试一下。追问
终于看到靠谱的回答了。我调整了数据库的字符集也不见效,SyncNavigator这个工具对源数据的要求太严格,不是太好用。
追答可以先将字符集转换为和数据库相同的字符集,然后再导入。
最后binlog日至要用mysqlbinlog打开,有些地方不能显示为字符串(可以理解的那种)是因为那个地方使用二进制记录的。如果你的日至格式是row那么,应该全部都是不能正常显示的字符集
触发器,会造成很多问题,考虑过,难道没有一种解析日志的方法吗?
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 表的最佳方法