我在MySQL
数据库中有一堆表,其中一些以phpbb_ * 开头,我想删除所有这些表。有人知道这样做的方法,而不是做
drop table <tablename>;
每一次?像正则表达式一样?
drop table phpbb*
或类似的东西?
答案 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');
答案 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;与数据库的实际名称。干杯!