数据删除(删)

删除记录用 DELETE 其他用DROP

删除表中全部数据

DELETE 表名

删一些特定数据

用where条件

DELETE 表名 WHERE 【LEN(学院电话)<8】……
image-59f265cb

原理

delete做的事情是一个一个抹去数据 效率比较低

但空间仍存在没被释放

这样就意味着可以反悔 删除的东西可以回滚操作恢复(rollback)

可以理解为逻辑删除

那么有没有物理删除 删干净那种(删库跑路)

truncate

效率很高 表被一次截断 物理删除

无法回滚

(哪有缺点 都是优点doge)

truncate table 表名

truncate属于DDL操作 delete属于DML操作

正经的 如果要删除很大的一个表 delete效率太低 可能要执行好几个小时

但truncate只需要几秒

这不是删表 只是删数据 表结构仍在 删表是drop table

truncate只能删全部数据 单条某些条还是用delete

补充:三兄弟对比 DELETE TRUNCATE DROP

容易混 拉个表一次说清

DELETE TRUNCATE DROP
删什么 数据 可带where挑着删 全部数据 一刀切 整张表连结构带数据
类型 DML DDL DDL
能否回滚 不能 不能
自增计数 不归零 归零 从头再来 表都没了谈不上

一句话 delete删内容 truncate删光内容 drop直接掀桌

补充:删排序后的前几条

MySQL里delete还能配order by和limit 比如清掉成绩最低的10条

DELETE FROM 选课成绩 ORDER BY 成绩 ASC LIMIT 10

先按成绩升序排 再从头删10条 不用先查出来再一条条delete

补充:超大表删除的换表大法

上面说了delete删大表可能要好几个小时 truncate又只能一刀全删

万一需求是"旧数据不要了 但马上要建张同名新表接着干活" 可以换表

RENAME TABLE 大表 TO 大表_旧;
CREATE TABLE 大表(……);    --结构和原来一样 瞬间建好

业务无缝衔接 旧表在后台慢慢truncate或者哪天心情好直接drop掉


⬅️ 07-数据插入(增) 🏠 00-数据库 ➡️ 09-数据修改(改)