使用正则表达式删除表 - 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 <<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>>');
确保将 替换为数据库的实际名称。干杯!
【讨论】:
以上是关于使用正则表达式删除表 - MySQL的主要内容,如果未能解决你的问题,请参考以下文章