回答
你不能只是一個單一的MySQL命令做到這一點,但是你可以使用MySQL來構建你的語句:
在MySQL的殼或通過phpmyadmin,使用以下查詢
SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(table_name) , ';')
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
,這將產生一個DROP語句,你可以比複製並執行刪除該表。
編輯:這裏的免責聲明 - 上面生成的聲明將使用該前綴刪除所有數據庫中的所有表。如果你想將其限制在一個特定的數據庫,修改查詢到這個樣子,並用自己的數據庫名稱替換數據庫名稱:
SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(table_name) , ';')
AS statement FROM information_schema.tables
WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';
你可以做到這一點與MySQL一個命令:
drop table myprefix_1, myprefix_2, myprefix_3;
你很有可能要在代碼中動態創建表名單雖然。
另一種方法是使用general purpose routine library爲MySQL 5
show tables like 'prefix_%';
複製結果並將其粘貼到文本編輯器或輸出查詢到一個文件,使用一些搜索和替換刪除不需要的格式,並用逗號代替\n
,逗號 將;
放在最後,並將刪除表添加到前面。
,你會得到的東西看起來是這樣的:
drop table myprefix_1, myprefix_2, myprefix_3;
無法訪問我正在使用的虛擬主機上的information_schema.tables,所以這是要走的路! – Florent
@andre-miller的解決方案是好的,但有更好的和稍微更專業,這將幫助你一次過執行所有。仍然需要多個命令,但該解決方案將允許您使用SQL進行自動構建。
SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME)
FROM information_schema.TABLES
WHERE TABLE_NAME LIKE 'myprefix_%');
PREPARE stmt FROM 'DROP TABLE @tbls';
EXECUTE stmt USING @tbls;
DEALLOCATE PREPARE stmt;
注意:此代碼是與平臺相關的,它是MySQL,但可以肯定它可以實現對Postgre,Oracle和MS SQL略有改動。
錯誤1064(42000):您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在第1行'@tbls'附近使用正確的語法。 錯誤1243(HY000):給予EXECUTE ERROR 1243(HY000)的未知預備語句處理程序(stmt):未知預處理語句處理程序(stmt)給予DEALLOCATE PREPARE –
語法錯誤在:PREPARE stmt FROM'DROP TABLE @tbls'; –
SELECT CONCAT("DROP TABLE ", table_name, ";")
FROM information_schema.tables
WHERE table_schema = "DATABASE_NAME"
AND table_name LIKE "PREFIX_TABLE_NAME%";
一些較早的答案是非常好的。 我把他們的想法與網絡上其他答案的 概念放在一起。
我需要刪除以「temp_」 我想出了這個代碼塊經過幾次反覆的所有表:
-- Set up variable to delete ALL tables starting with 'temp_'
SET GROUP_CONCAT_MAX_LEN=10000;
SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ', @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我希望這是其他MySQL/PHP程序員有用。
我發現準備好的語句對我來說工作起來有點棘手,但是當你有很多表時,設置GROUP_CONCAT_MAX_LEN
是必不可少的。這就產生了一個簡單的三個步驟,與剪切和從工作對我來說很大的mysql的命令行粘貼:
SET GROUP_CONCAT_MAX_LEN=10000;
SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(table_name) , ';')
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
然後小心剪切和粘貼所得長條狀DROP聲明。
以'\ G'結束查詢而不是';'給出了一點清理輸出 –
我只是想後我使用的確切SQL - 這是前3回答混合物的東西:
SET GROUP_CONCAT_MAX_LEN=10000;
SET @del = (
SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(TABLE_NAME), ';')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_NAME LIKE 'prefix_%'
);
PREPARE stmt FROM @del;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我滴成功表通過編輯查詢喜歡這個
SET GROUP_CONCAT_MAX_LEN=10000;
SET FOREIGN_KEY_CHECKS = 0;
SET @tbls = (SELECT GROUP_CONCAT(CONCAT('`', TABLE_NAME, '`'))
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'pandora'
AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ', @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
這是我發現的唯一一個在處理外鍵約束時在一個shebang中完成整個操作的程序。 –
只是另一種解決方案,使用GROUP_CONCAT所以它會執行一個下拉查詢,如
DROP TABLE table1,table2,..
SET @Drop_Stm = CONCAT('DROP TABLE ', (
SELECT GROUP_CONCAT(TABLE_NAME) AS All_Tables FROM information_schema.tables
WHERE TABLE_NAME LIKE 'prefix_%' AND TABLE_SCHEMA = 'database_name'
));
PREPARE Stm FROM @Drop_Stm;
EXECUTE Stm;
DEALLOCATE PREPARE Stm;
- 1. 帶有前綴
- 2. 無法在Logstash中刪除帶有前綴的所有字段
- 3. 刪除 「API」 前綴
- 4. 在SQL中刪除前綴數字
- 5. 從字符串中刪除帶有#或@前綴的單詞嗎?
- 6. 消除Lua中表格的前綴
- 7. 帶刪除的SQL刪除
- 8. 如何在sql中顯示帶有後綴/前綴的數據?
- 9. 從列表中刪除前綴u'
- 10. 如何最好地修改帶有表前綴的sql查詢
- 11. Spring Security刪除RoleVoter前綴
- 12. X2JS刪除屬性前綴
- 13. 角不刪除JSON前綴
- 14. 刪除前綴與製造
- 15. NSSortDescriptor刪除「該」前綴
- 16. 刪除路徑前綴
- 17. 先刪除前綴在MySQL
- 18. 刪除文件://前綴C#
- 19. Angular CLI刪除前綴CSS
- 20. 如何從SQL轉儲中刪除表前綴?
- 21. 刪除所有前綴指定的字符和後綴空間
- 22. SQL表刪除周前只有錯誤
- 23. 如何刪除與前綴bak_所有表
- 24. 刪除相同的前綴編號div
- 25. 基於前綴刪除列的內容
- 26. 刪除可變長度的前綴
- 27. 刪除WordPress上的作者前綴
- 28. 友好的URL,並刪除PHP前綴
- 29. 刪除TSQL中字符串的前綴
- 30. 帶有前導字符的SQL格式
我只有一個數據庫,所以我不需要第二個。 –
謝謝!所以問題在於我的MySQL服務器太慢了。需要10-15分鐘來執行腳本。然後,顯示完整的腳本花了太長時間,我停止了它。有更多時間後再試。 –
忽略外鍵檢查怎麼樣? – Raptor