MySql-如何从两个不同的数据库中获取不同表的列表

时间:2013-01-25 09:53:10

标签: mysql

我有两个mysql数据库。一个是,另一个是 OLD

我需要两个数据库之间不同表的列表。那是我的旧数据库有155个表的列表,我的新数据库有165个表的列表。

如何获取TEN不同表的名称?

是否有任何工具可以做到这一点,或者我们可以通过查询来做到这一点?

任何帮助都会感激...

提前致谢..

3 个答案:

答案 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'
)