sql语句中删除表数据drop、truncte的用法

哎,这次SQL删除操作我还真是踩了不少坑啊。

我们来谈谈掉落。
2 01 4 年我在上海做一个项目,一张表的数据乱七八糟。
客户坚持要“一键清空”,于是我在脑子里写了一个DROP TABLE table_name。
执行完之后,屏幕就黑了,表没有了,数据也没有了,甚至表结构也没有了。
客户差点解雇我,这太糟糕了。
Drop确实是个“杀手锏”,使用前要三思而后行。

后来,我学得很好。
2 01 6 年的北京,还有一个表数据需要清理。
这次我使用了 TRUNCATE TABLE table_name。
这太棒了,数据全部删除了,表结构还在,索引还在。
比如我们学校的student表,使用truncate删除数据后,下次批量导入新学生时,ID仍然是相连的,不需要从1 开始,而且速度很快,内存释放干净。
然而,截断有一个陷阱。
它无法触发删除触发器。
应该记住这一点。
比如我之前为某张表写了一个预删除审计触发器,但是使用truncate就没有效果。

我们来谈谈删除。
我2 01 9 年在深圳看到过这个操作,有举报系统,经常有用户抱怨删除数据慢。
我检查了一下,原来他们使用了 DELETE FROM table_name WHERE 条件。
表数据有几百万,但是条件写得不好。
每次删除数百条条目时,CPU 过载。
后来我建议他批量删除,或者干脆用truncate。
删除的好处是可以添加条件,LIMIT,最重要的是ROLLBACK。
例如,删除了一批数据,发现删除错误,可以回滚事务。
这比截断要好得多。
但速度实在是太慢了,而且空间还没有释放出来,这就太可怕了。

所以,看:
如果表真的要消失了,数据、结构、索引都会消失,使用DROP。
比如开发环境重装数据库,直接drop整个测试库。

如果您只想清除数据并保留表结构,既快捷又简单,请使用 TRUNCATE。
比如每天凌晨清空昨天的日志表,第二天继续写入新的日志。

如果只想删除一部分数据,必须保留表,或者操作必须可滚动,请使用DELETE。
例如,如果学生违规,则其记录会从公开列表中删除,但仍保留在违规记录列表中,以便于检查。

这三个操作用对了省事,用错了就让人头疼了。
在过去的1 0年里,我是在不断踩坑中积累这些经验的。
至于你,你必须要小心。

sql怎么删除一个表中的所有数据

删除和截断都是删除数据,但不删除表结构。

截断速度非常快,直接清除。

删除速度慢,一一删除,可能会回滚。

“取消”触发器有效,但“截断”触发器无效。

删除将保留最大空格标记,截断将其重置为原始状态。
使用哪一种取决于具体情况。

如何使用SQL Database Studio清空所有表记录

这是一个陷阱,不要使用 TRUNCATETABLE 来清除表中的记录。

2 01 8 年,有用户误用TRUNCATETABLE,导致表结构丢失,修复花了两天时间。

实用提醒:使用 DELETE FROM 表名 WHERE 1 =0 而不是 TRUNCATETABLE。