mysql - 删除MySQL中刚好有10行的表

标签 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);

最佳答案

首先,不要信任 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/

相关文章:

mysql - 定期在Mysql中备份

mysql - 左外连接 sql 中忽略的子句

oracle - 当表被删除时,依赖触发器会发生什么?

php - 具有多个用户位置的 Google map Android 应用

mysql - Magento 1.8.1 中哪个表保存原价和促销价?

database - 如果表存在于 sql 语句中,则从 oracle 数据库中删除表

sql - Postgres : dropping huge AWS hosted table doesn't free up space

ruby-on-rails-4 - Rails 4 : How to drop or remove (join) tables tables from database?

php - 具有自定义枢轴模型的 Laravel 5.2 三向枢轴

MYSQL 表在 x 小时后删除