0

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

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

我怎样才能得到十个不同表的名称?

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

任何帮助将不胜感激...

提前致谢..

4

3 回答 3

1

你有没有尝试过:

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
;
于 2013-01-25T09:57:43.947 回答
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
于 2013-01-25T10:04:28.800 回答
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'
)
于 2013-01-25T11:44:30.110 回答