私は 2 つの mysql データベースを持っています。1 つはNEWで、もう 1 つはOLDです。
2 つのデータベース間で異なるテーブルのリストが必要です。つまり、古いデータベースには 155 個のテーブルのリストがあり、新しいデータベースには 165 個のテーブルのリストがあります。
10 個の異なるテーブルの名前を取得するにはどうすればよいですか?
それを行うためのツールはありますか、またはクエリを介して実行できますか?
どんな助けでも感謝します...
前もって感謝します..
私は 2 つの mysql データベースを持っています。1 つはNEWで、もう 1 つはOLDです。
2 つのデータベース間で異なるテーブルのリストが必要です。つまり、古いデータベースには 155 個のテーブルのリストがあり、新しいデータベースには 165 個のテーブルのリストがあります。
10 個の異なるテーブルの名前を取得するにはどうすればよいですか?
それを行うためのツールはありますか、またはクエリを介して実行できますか?
どんな助けでも感謝します...
前もって感謝します..
やってみました:
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
;
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'
)
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