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

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

drop table <tablename>;

每次?像正则表达式?

drop table phpbb*

或者类似的东西?

【问题讨论】:

标签: mysql


【解决方案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>>');
    

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

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 2016-04-18
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 2014-11-18
      相关资源
      最近更新 更多