我在数据库中有一堆表MySQL
,其中一些以 phpbb_ *开头,我想将它们全部删除。有人知道这样做而不是这样做吗
drop table <tablename>;
每一次?像正则表达式?
drop table phpbb*
或类似的东西?
我在数据库中有一堆表MySQL
,其中一些以 phpbb_ *开头,我想将它们全部删除。有人知道这样做而不是这样做吗
drop table <tablename>;
每一次?像正则表达式?
drop table phpbb*
或类似的东西?
你可以使用这个 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');
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>>');
确保将 <> 替换为数据库的实际名称。干杯!