我有两个环境(生产和开发)
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'production';
生产300中表的数量
在开发中安装新功能后出现了更多表格
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'development';
开发中的表数量303
我想知道是否有查询(没有类似MySQLdiff 的扩展)来检查已添加的表是什么,我的意思是正在开发但尚未生成的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