And*_*ler 162
您不能只使用一个MySQL命令来执行此操作,但是您可以使用MySQL为您构造语句:
在MySQL shell中或通过PHPMyAdmin,使用以下查询
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
Run Code Online (Sandbox Code Playgroud)
这将生成一个DROP语句,您可以复制并执行以删除表.
编辑:此处的免责声明 - 上面生成的语句将删除具有该前缀的所有数据库中的所有表.如果要将其限制为特定数据库,请将查询修改为如下所示,并将database_name替换为您自己的database_name:
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';
Run Code Online (Sandbox Code Playgroud)
Bra*_*vik 30
一些早期的答案非常好.我已将他们的想法与网上其他答案的一些概念结合在一起.
我需要删除以'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;
Run Code Online (Sandbox Code Playgroud)
我希望这对其他MySQL/PHP程序员有用.
小智 21
show tables like 'prefix_%';
Run Code Online (Sandbox Code Playgroud)
复制结果并将它们粘贴到文本编辑器中或将查询输出到文件,使用一些搜索并替换以删除不需要的格式,并\n用逗号替换放在;最后并将drop table添加到前面.
你会得到这样的东西:
drop table myprefix_1, myprefix_2, myprefix_3;
Run Code Online (Sandbox Code Playgroud)
Ale*_*kov 10
@ 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;
Run Code Online (Sandbox Code Playgroud)
注意:这段代码是依赖于平台的,它是针对MySQL的,但肯定可以为Postgre,Oracle和MS SQL实现稍微改动.
小智 5
SELECT CONCAT("DROP TABLE ", table_name, ";")
FROM information_schema.tables
WHERE table_schema = "DATABASE_NAME"
AND table_name LIKE "PREFIX_TABLE_NAME%";
Run Code Online (Sandbox Code Playgroud)