删除MySQL中只有10行的表

时间:2016-08-23 19:40:59

标签: mysql drop-table

是否可以使用这样的语句在单个语句中删除包含10条记录的表?

.. DROP TABLE ... WHERE name IN 
(SELECT table_name FROM INFORMATION_SCHEMA.TABLES 
 WHERE TABLE_SCHEMA = 'my_db' AND table_rows = 10);

1 个答案:

答案 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添加要删除的表格列表。

第三,删除一组不确定的表是非常危险的。您可能会删除错误的表,因为代码中的错误会找到符合条件的表。这肯定会造成您无法从中恢复的数据丢失灾难。我从来没有"自动化"丢桌子。