回答
你不能只是一个单一的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