比较两个 MySQL 数据库的结构

Zhe*_*nyu 5 mysql database-design information-schema

我有两个非常相似的 MySQL 数据库。如何找出表中的差异,以及每个表中列的差异?

  • 数据库处于不同的模式。
  • 这只是我要比较的结构,而不是数据。

Rol*_*DBA 2

使用INFORMATION_SCHEMA.COLUMNS,这是我建议的查询

SELECT B.* FROM
(
    SELECT DISTINCT table_name FROM
    (
        SELECT table_name,column_name,ordinal_position,data_type,column_type,COUNT(1) match_count
        FROM information_schema.columns WHERE table_schema IN ('db1','db2')
        GROUP BY table_name,column_name,ordinal_position,data_type,column_type
        HAVING COUNT(1) = 1
    ) AA
) A INNER JOIN
(
    SELECT table_schema,table_name,column_name,ordinal_position,data_type,column_type
    FROM information_schema.columns WHERE table_schema IN ('db1','db2')
) B;
USING (table_name)
ORDER BY B.table_name,B,table_schema;
Run Code Online (Sandbox Code Playgroud)

输出将是每列的差异。您将看到数据类型、列类型和/或列位置方面的差异。您应该快速查看一张表是否只出现在一个数据库中,而不出现在另一个数据库中。