2017-04-25 104 views
0

有沒有辦法使用MYSQL跨多個數據庫刪除表?我正在使用Sequel Pro,但在GUI中看不到任何選項來執行此操作,因此我想知道是否有某種可以執行此操作的命令?刪除跨多個數據庫的表

表名在所有數據庫中都是相同的,並且逐個刪除它們是非常耗時的。這將有助於清理數據庫,因爲我們有數百個數據庫,並且它們都共享相同的表。但是,一些表格不再需要,需要刪除。

希望有人可以幫助查詢這樣做。

+0

您可以從信息架構中獲取表格的數據庫列表,使用該語句編寫drop table語句並在下一個循環中執行它們。 –

+0

你是什麼意思跨數據庫?你可以刪除表名,特別是即使你想使用它的循環。無論如果你想刪除該特定數據庫中的所有表 –

+0

我指的是跨多個數據庫刪除同一個表。比如說,你有200個數據庫都有相同的表結構,你不再需要幾張表。我詢問如何獲取所有數據庫和表的列表,並在所有這些數據庫上運行刪除表。 – Cole

回答

1

您需要爲每個表運行單獨的DROP語句。

我們可以查詢INFORMATION_SCHEMA.TABLES獲得表的列表...

SELECT t.table_schema, t.table_name 
    FROM information_schema.tables t 
WHERE t.table_name = 'tablename_i_want_to_drop' 
    AND t.table_schema NOT IN ('mysql','information_schema','performance_schema') 
ORDER BY t.table_schema, t.table_name 

而且我們可以使用表達式來代替列...

SELECT CONCAT('DROP TABLE `',t.table_schema,'`.`',t.table_name,'` ;') AS `-- stmt` 
    FROM ... 

然後我們可以該結果集並保存它,並從腳本執行語句。 MySQL命令行客戶端可以讓我們獲得一個腳本...

https://dev.mysql.com/doc/refman/5.7/en/mysql-batch-commands.html

您正在使用可能有類似的功能,執行腳本的客戶端。或者以某種方式複製結果集並將其粘貼到查詢窗口中。


在MySQL存儲程序,我們可以運行相同的查詢(以獲得表的列表),然後循環的(使用光標),並且準備,執行和釋放準備執行「DROP TABLE 「聲明。這是一個選項,但對於一次性拍攝,創建腳本會更容易。

+0

頂級腳本非常適合獲取列表輸出。我可以導出該列表或在Sequel Pro中輕鬆複製它。你能詳細說明一下這個腳本會是什麼樣子,或者我可以通過替換第一行來運行第二部分,它將執行與腳本相同的內容嗎? – Cole

+0

運行SELECT語句只會生成結果集。結果恰好是一組DROP語句。 (我只是使用SQL來生成SQL。)這是兩步過程,1)生成DROP語句,2)作爲一個單獨的步驟。執行DROP語句。我們需要一個客戶端程序來做到這一點...... 1)運行SELECT並且2)執行DROP語句。通過一次調用數據庫服務器來完成這項工作的唯一方法就是調用MySQL存儲過程。該程序將由客戶執行兩個步驟。 (顯然,我們首先必須編寫該程序。) – spencer7593

+0

這很好。我能夠輕鬆地粘貼第一個命令,以獲得在後續pro的查詢部分的拖放語句。複製drop語句並將其粘貼到新的查詢區域後,我可以運行它並運行每個查詢並刪除表格。感謝您的幫助。 – Cole