查询比较 MySQL 中两个表的结构

sjd*_*jdh 25 mysql schema information-schema ddl

为了自动化我的一个 MySQL 数据库的备份过程,我想比较两个表的结构(当前版本与旧版本)。

你能想到一个可以比较两个表的查询吗?

以下是一些您可以比较的示例表。

CREATE TABLE product_today
(
  pname VARCHAR(150),
  price int,
  PRIMARY KEY (pname)
);

CREATE TABLE product_yesterday
(
  pname VARCHAR(150),
  price int,
  PRIMARY KEY (pname)
);

CREATE TABLE product_2days_back
(
  pname VARCHAR(15),
  price int,
  PRIMARY KEY (pname)
);
Run Code Online (Sandbox Code Playgroud)

前两个表具有相同的结构。最后一个不一样。我只需要知道两个表是否具有不同的结构。我对它们的不同之处不感兴趣。

Rol*_*DBA 45

当前数据库中的两个表

如果你想知道两个表是否不同,运行这个

SELECT IF(COUNT(1)>0,'Differences','No Differences') Comparison FROM
(
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT(1) rowcount
    FROM information_schema.columns
    WHERE table_schema=DATABASE()
    AND table_name IN ('product_today','product_yesterday')
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT(1)=1
) A;
Run Code Online (Sandbox Code Playgroud)

如果您确实需要查看差异,请运行此

SELECT column_name,ordinal_position,data_type,column_type FROM
(
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT(1) rowcount
    FROM information_schema.columns
    WHERE table_schema=DATABASE()
    AND table_name IN ('product_today','product_yesterday')
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT(1)=1
) A;
Run Code Online (Sandbox Code Playgroud)

特定数据库中的两个表

如果您想知道数据库中的两个表是否不同mydb,请运行此

SELECT IF(COUNT(1)>0,'Differences','No Differences') Comparison FROM
(
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT(1) rowcount
    FROM information_schema.columns
    WHERE table_schema='mydb'
    AND table_name IN ('product_today','product_yesterday')
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT(1)=1
) A;
Run Code Online (Sandbox Code Playgroud)

如果您确实需要查看差异,请运行此

SELECT column_name,ordinal_position,data_type,column_type FROM
(
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT(1) rowcount
    FROM information_schema.columns
    WHERE table_schema='mydb'
    AND table_name IN ('product_today','product_yesterday')
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT(1)=1
) A;
Run Code Online (Sandbox Code Playgroud)

两个不同数据库中的两个表

如果你想知道db1.tb1db2.tb2是否不同,运行这个

SELECT IF(COUNT(1)>0,'Differences','No Differences') Comparison FROM
(
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT(1) rowcount
    FROM information_schema.columns
    WHERE
    (
        (table_schema='db1' AND table_name='tb1') OR
        (table_schema='db2' AND table_name='tb2')
    )
    AND table_name IN ('product_today','product_yesterday')
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT(1)=1
) A;
Run Code Online (Sandbox Code Playgroud)

如果您确实需要查看差异,请运行此

SELECT column_name,ordinal_position,data_type,column_type FROM
(
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT(1) rowcount
    FROM information_schema.columns
    WHERE
    (
        (table_schema='db1' AND table_name='tb1') OR
        (table_schema='db2' AND table_name='tb2')
    )
    AND table_name IN ('product_today','product_yesterday')
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT(1)=1
) A;
Run Code Online (Sandbox Code Playgroud)

试一试 !!!

  • “两个不同数据库中的两个表”部分中的 tb1、tb2、product_today、product_yesterday 有什么区别? (2认同)