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

时间:2015-01-07 14:14:06

标签: mysql

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

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'production';

生产300中表的数量

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

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'development';

开发中的表数量303

我想知道是否有查询(没有类似MySQLdiff 的扩展)来检查已添加的表是什么,我的意思是正在开发但尚未生成的3个表。

3 个答案:

答案 0 :(得分:2)

如何使用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;

答案 1 :(得分:0)

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

SQL输出将是完整的DML语句(CREATE TABLE / INSERT STATEMENTS),因此您的目标数据库看起来与源类似。

抽象地是这样的:

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

答案 2 :(得分:0)

确实使用左连接这将返回information_Schema中的数据,列出开发模式中不在生产模式中的表。

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