6

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

drop table <tablename>;

每一次?像正则表达式?

drop table phpbb*

或类似的东西?

4

2 回答 2

13

你可以使用这个 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

于 2012-10-28T15:49:48.567 回答
0

ERROR 1046 (3D000): No database selected补充一下上面的答案,如果在开始过程之前没有选择数据库,MYSQL 会返回错误。因此,将此声明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>>');

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

于 2018-01-29T18:58:53.257 回答