Mysql 查询以检查两个仓库中表的差异

Mysql 查询以检查两个仓库中表的差异,mysql,Mysql,我有两个环境(生产和开发) 生产中的表格数量300 安装新功能后,在开发中出现了更多的表 SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'development'; 开发中的表数量303 我想知道是否有一个查询(没有像extencion那样的查询)来检查添加了哪些表,我指的是3个正在开发但尚未投入生产的表 MySQL workbench有一个名为的实用程序,它比较两个数据库之间的差异。 diff输出可以是

我有两个环境(生产和开发)

生产中的表格数量300

安装新功能后,在开发中出现了更多的表

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'development';
开发中的表数量303


我想知道是否有一个查询(没有像extencion那样的查询)来检查添加了哪些表,我指的是3个正在开发但尚未投入生产的表

MySQL workbench有一个名为的实用程序,它比较两个数据库之间的差异。 diff输出可以是csv,也可以是sql语句,因此您可以在开发环境中运行这些dml

SQL输出将是完整的DML语句(CREATETABLE/INSERT语句),因此目标数据库与源数据库相似

抽象地说是这样的:

$ mysqldbcompare --server1=root:root@localhost \
    --server2=root:root@localhost db1:db2 --changes-for=server1 -a \
    --difftype=sql

确保使用左联接这将从信息模式返回数据,该信息模式列出开发模式中的表,而不是生产模式中的表

SELECT * 
FROM information_schema.tables A
LEFT JOIN information_Schema.tables B
  on A.Table_Name = B.Table_Name
  and B.table_Schema = 'production'
  and A.Table_Schema = 'development'
Where B.Table_Schema is null

使用LEFT JOIN获得两个临时表的差异如何,即一个包含生产方案表,另一个包含开发方案表:

SELECT table_name_development FROM
  (SELECT table_name AS table_name_development FROM information_schema.tables WHERE table_schema = 'development') AS d
LEFT JOIN
  (SELECT table_name AS table_name_production FROM information_schema.tables WHERE table_schema = 'production') AS p
ON table_name_development=table_name_production
WHERE table_name_production IS NULL;

我试过了,但输出的错误代码是:1054。“on子句”中的未知列“B.TableName”如果输入错误,则应为B.table\u name。查询可以工作,但不会返回表名,而是返回null值。当然,应该读取SELECT table\u name\u development,因为这些是您要查找的条目。很抱歉,我相应地更新了我的答案。
SELECT table_name_development FROM
  (SELECT table_name AS table_name_development FROM information_schema.tables WHERE table_schema = 'development') AS d
LEFT JOIN
  (SELECT table_name AS table_name_production FROM information_schema.tables WHERE table_schema = 'production') AS p
ON table_name_development=table_name_production
WHERE table_name_production IS NULL;