我有两个mysql数据库。一个是新,另一个是 OLD 。
我需要两个数据库之间不同表的列表。那是我的旧数据库有155个表的列表,我的新数据库有165个表的列表。
如何获取TEN不同表的名称?
是否有任何工具可以做到这一点,或者我们可以通过查询来做到这一点?
任何帮助都会感激...
提前致谢..
答案 0 :(得分:1)
你试过了吗?
SHOW TABLES IN database;
或使用information schema
:
select table_schema,
table_name from information_schema.tables
where table_name = ???;
根据OP评论编辑:
The INFORMATION_SCHEMA database is made up of temporary tables using the MEMORY storage engine.。 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;
您在此指定table_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
;
答案 1 :(得分:0)
我认为您应该查询数据库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
答案 2 :(得分:0)
您可以通过查询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'
)