是否可以使用这样的语句在单个语句中删除包含 10 条记录的表?
.. DROP TABLE ... WHERE name IN
(SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'my_db' AND table_rows = 10);
最佳答案
首先,不要信任 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以及您要删除的表的列表。
第三,删除一组不确定的表是非常危险的。由于代码中查找符合条件的表的错误,您可能会删除错误的表。这肯定会造成一场无法恢复的数据丢失灾难。我从不“自动”删除表格。
关于mysql - 删除MySQL中刚好有10行的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39109437/