是否可以使用这样的语句在单个语句中删除具有 10 条记录的表?
.. DROP TABLE ... WHERE name IN
(SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'my_db' AND table_rows = 10);
是否可以使用这样的语句在单个语句中删除具有 10 条记录的表?
.. DROP TABLE ... WHERE name IN
(SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'my_db' AND table_rows = 10);
首先,不要相信table_rows
INFORMATION_SCHEMA.TABLES 中的。这是一个估计,并不精确。考虑到在任何给定时刻,可能存在插入或删除行的未提交事务,它怎么可能是精确的?表中的行数可能包括也可能不包括这些更改。
其次,该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 评论,您可以使用要删除的表列表准备动态 SQL 语句。
第三,删除一组不确定的表是非常危险的。您可能会删除错误的表,因为您的代码中有一个错误会找到与条件匹配的表。这肯定会造成您无法恢复的数据丢失灾难。我从不“自动”删除表格。