首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex - MySQL删除表

使用regex - MySQL删除表
EN

Stack Overflow用户
提问于 2012-10-28 15:39:22
回答 2查看 6.9K关注 0票数 6

我在一个MySQL数据库中有一堆表,其中一些表是从phpbb_*开始的,我想将这些表全部删除。有人知道怎么做而不是做吗?

代码语言:javascript
复制
drop table <tablename>;

每一次?就像一只公鸡?

代码语言:javascript
复制
drop table phpbb*

或者类似的东西?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-28 15:49:48

您可以使用以下MySQL过程:

代码语言:javascript
复制
DELIMITER $$
CREATE PROCEDURE drop_tables_like(pattern VARCHAR(255), db VARCHAR(255))
BEGIN
    SELECT @str_sql:=CONCAT('drop table ', GROUP_CONCAT(table_name))
    FROM information_schema.tables
    WHERE table_schema=db AND table_name LIKE pattern;

    PREPARE stmt from @str_sql;
    EXECUTE stmt;
    DROP prepare stmt;
END$$

DELIMITER ;

对于删除“test1”数据库中以“a”开头的所有表,可以运行:

代码语言:javascript
复制
CALL drop_tables_like('a%', 'test1');

参考资料:http://dev.mysql.com/doc/refman/5.5/en/drop-table.html

票数 15
EN

Stack Overflow用户

发布于 2018-01-29 18:58:53

为了添加到上面的答案,MYSQL返回一个错误ERROR 1046 (3D000): No database selected,如果在开始这个过程之前没有选择数据库。因此,将这个语句use <<db_name>>;放在上面的答案前面。订正的解决办法是:

代码语言:javascript
复制
use <<db_name>>;    
DELIMITER $$
CREATE PROCEDURE drop_tables_like(pattern VARCHAR(255), db VARCHAR(255))
BEGIN
    SELECT @str_sql:=CONCAT('drop table ', GROUP_CONCAT(table_name))
    FROM information_schema.tables
    WHERE table_schema=db AND table_name LIKE pattern;

    PREPARE stmt from @str_sql;
    EXECUTE stmt;
    DROP prepare stmt;
END$$    
DELIMITER ;
CALL drop_tables_like('a%', '<<db_name>>');

确保用数据库的实际名称替换<>。干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13110225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档