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

时间:2012-10-28 15:39:23

标签: mysql

我在MySQL数据库中有一堆表,其中一些以ph​​pbb_ * 开头,我想删除所有这些表。有人知道这样做的方法,而不是做

drop table <tablename>;

每一次?像正则表达式一样?

drop table phpbb*

或类似的东西?

2 个答案:

答案 0 :(得分:8)

您可以使用此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

答案 1 :(得分:0)

只是为了添加上面的答案,如果在开始该过程之前没有选择数据库,MYSQL将返回错误ERROR 1046 (3D000): No database selected。因此,请将此声明use <<db_name>>;添加到上述答案中。修订后的解决方案是:

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

确保替换&lt;&gt;与数据库的实际名称。干杯!