Mysql - 丢弃表如果存在不起作用

时间:2015-11-18 04:08:38

标签: mysql mysql-workbench

我尝试使用以下代码清空数据库(删除所有表):

SELECT concat('DROP TABLE IF EXISTS ','`',table_schema,'`','.','`',table_name,'`',';') FROM information_schema.tables WHERE table_schema = 'DB';

我正在获取命令的输出,但数据库没有任何反应。如果我从输出中获取一个单独的命令,并在控制台中运行它,它就可以工作。

我做错了什么?

2 个答案:

答案 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;