我有两个 mysql 数据库。一个是NEW另一个是OLD。
我需要两个数据库之间的不同表的列表。那就是我的旧数据库有 155 个表的列表,而我的新数据库有 165 个表的列表。
我怎样才能得到十个不同表的名称?
是否有任何工具可以做到这一点,或者我们可以通过查询来做到这一点?
任何帮助将不胜感激...
提前致谢..
我有两个 mysql 数据库。一个是NEW另一个是OLD。
我需要两个数据库之间的不同表的列表。那就是我的旧数据库有 155 个表的列表,而我的新数据库有 165 个表的列表。
我怎样才能得到十个不同表的名称?
是否有任何工具可以做到这一点,或者我们可以通过查询来做到这一点?
任何帮助将不胜感激...
提前致谢..
你有没有尝试过:
SHOW TABLES IN database;
或使用information schema
:
select table_schema,
table_name from information_schema.tables
where table_name = ???;
根据 OP 的评论进行编辑:
INFORMATION_SCHEMA 数据库由使用 MEMORY 存储引擎的临时表组成。. INFORMATION_SCHEMA 数据库中的所有表都作为 MEMORY 存储引擎表直接存储在内存中。它们完全在 MySQL 内部,因此 .frm 机制在 mysqld 中处理。在我的回答中,我首先展示了 INFORMATION_SCHEMA.TABLES 的表格布局。它是内存中的临时表。它使用存储引擎协议进行操作。因此,当 mysqld 关闭时,所有 information_schema 表都将被删除。当 mysqld 启动时,所有 information_schema 表都被创建为 TEMPORARY 表,并为 mysql 实例中的每个表重新填充元数据。
例如,如果您按照两个命令运行,您将在 mysql元数据中看到所有数据库。
show databases;
use information_schema;
show tables;
在这里,您指定 atable_schema
以获取表名。
SELECT table_name from
information_schema.tables WHERE table_schema = 'mydb';
使用连接:假设一个数据库名称是db1
,另一个db2
SELECT table_name from
db1.tables x
inner join
db2.tables
on x.table_name = y.table_name
;
我认为你应该查询数据库information_schema
。这是一个包含所有数据库的所有元数据的表。查询类似:
SELECT * FROM `TABLES` T1
LEFT JOIN `TABLES` T2
ON T1.`TABLE_NAME` = T2.`TABLE_NAME`
WHERE T1.`TABLE_SCHEMA`='xxx'
AND T2.`TABLE_SCHEMA`='yyy'
AND T1.TABLE_CATALOG IS NULL
您可以通过查询INFORMATION_SCHEMA
(包含服务器中其他数据库信息的数据库,如表名、列名、主键列、主键名、索引等)来执行此操作,如下所示:
-- this gives the table names that are in the new table but not in the old table
select newTable.TABLE_NAME
from TABLES newTable
where newTable.TABLE_SCHEMA='NEW' and newTable.TABLE_NAME not in
(
select oldTable.TABLE_NAME
from TABLES oldTable
where oldTable.TABLE_SCHEMA='OLD'
)