我尝试使用以下代码清空数据库(删除所有表):
SELECT concat('DROP TABLE IF EXISTS ','`',table_schema,'`','.','`',table_name,'`',';') FROM information_schema.tables WHERE table_schema = 'DB';
我正在获取命令的输出,但数据库没有任何反应。如果我从输出中获取一个单独的命令,并在控制台中运行它,它就可以工作。
我做错了什么?
答案 0 :(得分:3)
如您所知,SELECT
仅返回查询结果。它不知道您实际上打算执行该查询的结果。 (在大多数情况下,这没有任何意义。)您可以使用预准备语句来执行您想要的(未经测试):
SET @s:='';
SELECT @s:=concat(@s, 'DROP TABLE IF EXISTS ','`',table_schema,'`','.','`',table_name,'`',';') FROM information_schema.tables WHERE table_schema = 'DB';
PREPARE stm FROM @s;
EXECUTE stm;
DEALLOCATE PREPARE stm;
答案 1 :(得分:1)
为什么要使用SELECT语句,只需尝试以下查询:
DROP TABLE IF EXISTS table_name;