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.ColumnTypeFROM
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 c2WHERE 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 s2WHERE
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数据对比就可以找出所有不明白的差异;它不仅能清楚的分析出新的数据库中有哪些改变,而且还能发现更多可能你自己都不知道的不明白的差异。