如何删除我的表谁都有一个前缀myprefix_
?
注:需要在phpMyAdmin执行它
如何删除我的表谁都有一个前缀myprefix_
?
注:需要在phpMyAdmin执行它
你不能只是一个单一的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_%';
一些早期的答案都非常好。 我有自己的想法拉到一起与网络上的其他答案有些概念。
我需要删除所有表以“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程序员有用。
show tables like 'prefix_%';
查询复制结果并将其粘贴到文本编辑器或输出到文件,使用一些搜索和替换,以除去不需要的格式和替换\n
用逗号放;
上月底下降表添加到前面。
你会得到的东西看起来是这样的:
drop table myprefix_1, myprefix_2, myprefix_3;
@安德烈-米勒的解决方案是好的,但有更好的和稍微更专业,这将帮助你一次过执行所有。 仍然需要一个以上的命令,但该解决方案将允许你使用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略有改动。
我成功地删除表的编辑查询喜欢这个
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;
SELECT CONCAT("DROP TABLE ", table_name, ";")
FROM information_schema.tables
WHERE table_schema = "DATABASE_NAME"
AND table_name LIKE "PREFIX_TABLE_NAME%";
你可以做到这一点与MySQL一个命令:
drop table myprefix_1, myprefix_2, myprefix_3;
你可能不得不在代码中动态创建表名单虽然。
另一种方法是使用通用例程库为MySQL 5。
我只是想后我使用的确切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;
我发现,所制备的声明是有点棘手的工作对我来说,但设置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语句。
刚开始使用GROUP_CONCAT另一种解决方案,因此它会执行像一滴查询
DROP TABLE表1,表2,..
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;