删除数据的mysql语句有哪些

等等,我昨晚加班到晚上1 1 点,刚刚把一个测试表的几百条数据删除完了。
本来想用TRUNCATE,但是手一抖,就敲了DELETE。
还好我发现得及时,不然我昨天还没上线就已经哭笑不得了。
你看,有时一个字母的不同可能会产生完全不同的结果。

MySQL DELETE语法使用详细解析

上周 我的这个朋友 向MySQL询问删除单表的删除操作详情 格式:DELETE FROM 表名 [WHERE 条件]
无 WHERE 删除所有行 TRUNCATE TABLE 通过删除多个表来更快地删除表 基于 JOIN 的两种选择 USING 子句
外键限制 小心处理
删除行数 LIMIT count
按顺序删除 ORDER BY
优化选项 低优先级 延迟执行
QUICK 快速删除
忽略 忽略MyISAM表中的错误 航天局 优化表
myisamchk 更新
AUTO_INCRMENT 自动调整序列值并批量删除 快速+优化 提高删除多个表时的效率 不支持 LIMIT 不支持使用 ORDER BY
别名 注意跨数据库限制 我有一个关于 InnoDB 外键的具体问题 优化器 别犯错误
算了 由你决定

当我们使用带有 DROP 关键字的 ALTER TABLE 命令从表中删除所有列时,MySQL 返回什么?

哈,你的问题是对的。
上周,一位客户陷入了这个陷阱,并问我为什么无法删除列。
他很困惑。

嗯,这是 MySQL 的一个真正的限制。
想一想,如果一个表没有列,它还叫表吗?它只是一个空壳。
数据库必须有某种东西的支持,否则查询和存储就会崩溃。

你尝试过这个命令吗?更改表员工删除列名称、删除列 ID;这个东西执行起来会立刻报错。
错误码是1 09 0,提示很明确:“You不能用ALTER TABLE删除所有列;请改用DROP TABLE”。

为什么不呢? MySQL设计中,表结构必须至少留一列。
这是底层逻辑,表必须有一个“根”来维护它。
如果你真的把所有的列都删除了,表就会变成无头苍蝇,数据库系统就认不出这个东西还是表了。

那么我们应该如何看待官方建议呢?或者您可以使用删除表员工;直接删除整个表。
或者您可以使用 ALTER TABLE 员工 DROP COLUMN NAME;只需删除一个并保留一个即可。
简单地说,使用 DROP TABLE 删除整个表并更改结构以仅保留所需的列。

这样的设计其实还是比较合理的,可以防止用户手抖的时候不小心拿掉桌子。
但有时确实很麻烦。
例如,如果您想重建一个表并替换所有旧列。
如果你愿意,你必须先放置一个临时柱,然后逐步进行。
这就相当麻烦了。

如果你觉得这个限制太痛苦的话,你可能要等待MySQL在未来的版本中改变它。
这是当前版本,硬编码的。
不管怎样,我的建议是,如果你真的想删除所有表,就删除表吧。
甚至不要考虑使用 ALTER TABLE 来走捷径。