是否可以使用这样的语句在单个语句中删除包含10条记录的表?
.. DROP TABLE ... WHERE name IN
(SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'my_db' AND table_rows = 10);
答案 0 :(得分:2)
首先,不要信任INFORMATION_SCHEMA.TABLES中的table_rows
。这是一个估计,它不准确。它是如何精确的,因为在任何给定的时刻,可能会有未插入或删除行的事务?表中的行数可能包括也可能不包括这些更改。
其次,DROP TABLE
语句仅支持要删除的固定表列表。这是http://dev.mysql.com/doc/refman/5.7/en/drop-table.html的语法参考:
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
此声明不支持WHERE
子句或任何条件。您必须明确地命名表。
您应该养成阅读文档的习惯,以找出支持的语法。这是我对Stack Overflow问题的最大抱怨:太多人跳过阅读参考文档。如果他们这样做,90%或更多的问题是不必要的。
正如@Barmar上面评论的那样,您可以prepare a dynamic SQL statement添加要删除的表格列表。
第三,删除一组不确定的表是非常危险的。您可能会删除错误的表,因为代码中的错误会找到符合条件的表。这肯定会造成您无法从中恢复的数据丢失灾难。我从来没有"自动化"丢桌子。