MySQL:如何使用单个查询删除多个表?

时间:2011-07-20 07:48:04

标签: mysql sql sql-delete multiple-tables

我想轻松删除多个表而不在drop查询中实际列出表名,要删除的表有前缀'wp _'

7 个答案:

答案 0 :(得分:15)

我使用的查询与Angelin非常相似。如果您有多个表,则必须增加group_concat的最大长度。否则,查询将对group_concat返回的截断字符串进行barf。

这是我的10美分:

-- Increase memory to avoid truncating string, adjust according to your needs
SET group_concat_max_len = 1024 * 1024 * 10;
-- Generate drop command and assign to variable
SELECT CONCAT('DROP TABLE ',GROUP_CONCAT(CONCAT(table_schema,'.',table_name)),';') INTO @dropcmd FROM information_schema.tables WHERE table_schema='databasename' AND table_name LIKE 'my_table%';
-- Drop tables
PREPARE str FROM @dropcmd; EXECUTE str; DEALLOCATE PREPARE str;

答案 1 :(得分:7)

只需分享其中一个解决方案:

  

的MySQL> SELECT CONCAT(                     “DROP TABLE”,
                     GROUP_CONCAT(TABLE_NAME)              )AS stmt

     

FROM information_schema.TABLES

     

WHERE TABLE_SCHEMA =“your_db_name”AND TABLE_NAME LIKE“ur   条件“进入outfile'/tmp/a.txt';

     

的MySQL>来源/tmp/a.txt;

答案 2 :(得分:3)

简单的解决方案,没有错误风险:

mysqldump创建一个包含DROP命令的文件,如

DROP TABLE IF EXISTS `wp_matable`;

带有“grep”的“DROP TABLE wp_”会向我们提供执行命令

所以删除是由这些trhee行(您可以编辑drop.sql以检查之前将删除哪些表)

mysqldump -u user -p database > dump.sql 
grep "DROP TABLE `wp_" dump.sql > drop.sql
mysql -u user -p database < drop.sql

答案 3 :(得分:2)

小心“_”,需要在Mysql之前用“\”编写,如:

SELECT CONCAT('DROP TABLE',GROUP_CONCAT(CONCAT(table_schema,'.',table_name)),';') INTO @dropcmd FROM information_schema.tables WHERE table_schema='databasename' AND table_name LIKE '**my\\_table**%';

答案 4 :(得分:0)

对于伟大的mysqldump解决方案,最好使用选项--skip-quote-names

mysqldump --skip-quote-names -u user -p database > dump.sql 
grep "DROP TABLE wp_" dump.sql > drop.sql
mysql -u user -p database < drop.sql

你摆脱了表名中的反引号。 grep部分在带有反引号的某些环境中不起作用。

答案 5 :(得分:-1)

在mysql中删除单个表:

DROP TABLE TABLE_NAME;

答案 6 :(得分:-2)

转到c:\ xampp \ mysql \ data \ your folder

选择要删除的多个表,然后按删除按钮

由于