0

私は 2 つの mysql データベースを持っています。1 つはNEWで、もう 1 つはOLDです。

2 つのデータベース間で異なるテーブルのリストが必要です。つまり、古いデータベースには 155 個のテーブルのリストがあり、新しいデータベースには 165 個のテーブルのリストがあります。

10 個の異なるテーブルの名前を取得するにはどうすればよいですか?

それを行うためのツールはありますか、またはクエリを介して実行できますか?

どんな助けでも感謝します...

前もって感謝します..

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インスタンス内のすべてのテーブルのメタデータが再入力されます。

たとえば、2つのコマンドに従って実行すると、mysqlメタデータ内のすべてのデータベースが表示されます。

  • show databases;
  • use information_schema; show tables;

ここではtable_schema、テーブル名を取得するためにを指定しています。

SELECT table_name from 
information_schema.tables WHERE table_schema = 'mydb';

結合の場合:1つのデータベース名が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これは、次のように (テーブル名、列名、主キー列、主キー名、インデックスなど、サーバー内の他のデータベースの情報を含むデータベース) にクエリを実行することで実行できます。

-- 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 に答える
0

database に対してクエリを実行する必要があると思います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 に答える