使用正则表达式删除表 - MySQL

Posted

技术标签:

【中文标题】使用正则表达式删除表 - MySQL【英文标题】:drop tables using regex - MySQL 【发布时间】:2012-10-18 02:15:55 【问题描述】:

我在 mysql 数据库中有一堆表,其中一些以 phpbb_* 开头,我想将它们全部删除。有人知道这样做而不是这样做的方法吗

drop table <tablename>;

每次?像正则表达式?

drop table phpbb*

或者类似的东西?

【问题讨论】:

也许可以看看这篇文章:***.com/questions/1589278/… 【参考方案1】:

您可以使用这个 MySQL 程序:

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”开头的所有表,您可以运行:

CALL drop_tables_like('a%', 'test1');

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

【讨论】:

【参考方案2】:

补充一下上面的答案,如果在开始过程之前没有选择数据库,MYSQL 会返回错误ERROR 1046 (3D000): No database selected。所以在上面的答案前面加上这个声明use &lt;&lt;db_name&gt;&gt;;。修改后的解决方案是:

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>>');

确保将 替换为数据库的实际名称。干杯!

【讨论】:

以上是关于使用正则表达式删除表 - MySQL的主要内容,如果未能解决你的问题,请参考以下文章

mysql 正则表达式求解答

如何在 MySQL 中使用正则表达式删除 href 属性中的所有空格

正则表达式匹配 MySQL 注释

完整复习(包含语法)--MYSQL正则表达式

MySQL之正则表达式(REGEXP)

MYSQL - 如果不在类别中并且正则表达式匹配内容,则:(添加到类别并从其他类别中删除)