MySQL数据对比:找出你不知道的差异(mysql数据比对)

MySQL数据对比是Java开发者的一种重要工作,它可以让我们对新的和现存的数据库中的数据进行比较。通过这种方式,可以清楚的分析出新的数据库中有哪些改变,或者说某个数据表中存在哪些不明白的差异。

MySQL数据对比大多使用一下4种常用策略:

1、单表记录对比法:这种策略是最常见的,也是最容易处理的,也就是比较两个数据表中的单表记录。如果两个表中存在某个字段上的值不相等,那就表明了存在差异。

例如:

SELECT users.name 
FROM user_table1
WHERE user_table1.user_id !=
(SELECT user_id
FROM user_table2
WHERE users.name = user_table2.name);

2、表项目对比法:这种策略用于比较两个数据表的字段。它的实现也很简单,只需要对比这两个数据表中的字段,如果字段项目不相等就表明存在差异。

例如:

SELECT
c1.ColumnName,
c1.ColumnType,
c2.ColumnType
FROM
INFORMATION_SCHEMA.COLUMNS c1,
INFORMATION_SCHEMA.COLUMNS c2
WHERE c1.table_name = 'user_table1'
AND c1.table_schema = c2.table_schema
AND c1.table_name = c2.table_name
AND c1.column_name = c2.column_name
AND c1.column_type != c2.column_type;

3、表结构对比法:这种策略可以对比两个数据表的架构,如果架构不同就表示存在差异。

例如:

SELECT
c1.table_name,
c1.engine,
c1.table_collation,
c2.table_name,
c2.engine,
c2.table_collation
FROM
INFORMATION_SCHEMA.TABLES c1,
INFORMATION_SCHEMA.TABLES c2
WHERE c1.table_schema = c2.table_schema
AND c1.table_name = c2.table_name
AND (CASE
WHEN c1.Engine = 'MyISAM' THEN
c1.Table_collation != c2.Table_collation
ELSE
c1.Engine != c2.Engine
END );

4、表中对象对比法:这种策略是用来对比数据表中的对象,例如索引,存储过程,触发器,函数等。如果两个数据表之间的对象属性不相等,那就表明存在差异。

例如:

SELECT
s1.ROUTINE_NAME,
s1.ROUTINE_TYPE,
s1.IS_DETERMINISTIC,
s2.ROUTINE_NAME,
s2.ROUTINE_TYPE,
s2.IS_DETERMINISTIC
FROM
INFORMATION_SCHEMA.ROUTINES s1,
INFORMATION_SCHEMA.ROUTINES s2
WHERE
s1.ROUTINE_SCHEMA = s2.ROUTINE_SCHEMA
AND s1.ROUTINE_NAME = s2.ROUTINE_NAME
AND (CASE
WHEN s1.ROUTINE_TYPE IN ('PROCEDURE', 'FUNCTION') THEN
s1.IS_DETERMINISTIC != s2.IS_DETERMINISTIC
ELSE
FALSE
END);

通过以上这些策略,MySQL数据对比就可以找出所有不明白的差异;它不仅能清楚的分析出新的数据库中有哪些改变,而且还能发现更多可能你自己都不知道的不明白的差异。


数据运维技术 » MySQL数据对比:找出你不知道的差异(mysql数据比对)