2013-01-25 196 views
0

我有兩個mysql數據庫。一個是和另一個是MySql-如何從兩個不同的數據庫獲取不同表的列表

我需要兩個數據庫之間的不同表的列表。這是我的舊數據庫有155個表的列表,我的新數據庫有165個表的列表。

如何獲得TEN不同表格的名稱?

有沒有什麼工具可以做到這一點,或者我們可以通過查詢做到?

任何幫助會感激...

在此先感謝..

回答

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 
; 
+0

SHOW TABLES IN database;將只顯示錶格列表。你能否清楚地解釋信息模式的概念...... – Fero

+0

@Fero後者是最適合你使用'信息模式'首先檢索幾張表,然後通過使用這些名稱加入到其他架構。 – bonCodigo

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 
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' 
) 
相關問題