浅析MySQL删除方法:delete、truncate、drop的区别

是的,删除 MySQL;您确实需要区分缩短和下降。
说实话,刚开始使用的时候我常常感到困惑。

1 .工作领域
删除:此项可以删除表中的部分或全部数据。
如果您想在某些情况下删除数据,请使用它。
例如,年龄<1>仅删除 1 8 岁以下的用户。
不删除表结构;桌子还在。

Shortcut:这家伙相当残暴,直接清除了表中的所有数据,但保留了表。
您尚未添加任何要删除的条件。
报告截断表用户。
这个命令是用户表中的所有数据都消失了,但是该表仍然存在。
我实际上重建了桌子。

drop:这是最全面的将表和数据结构直接drop在一起。
例如,使用此命令,DROP TABLE 用户;用户表完全消失了;以后想办法去找,但是就找不到了。

2 实施原则
删除:逐行删除,每行都标记为“已删除”。
例如,如果您使用InnoDB引擎;这会将数据标记为删除;但存储空间尚未释放。
该物品可以重复使用。
您的交易尚未提交。
中途运行删除命令并撤消它。

Drop:不逐行删除,而是直接重建表,删除旧表并创建一个空表。
所以比直接释放删除存储空间要快。
但由于表是重建的,所以无法回滚。

drop:这会直接删除表定义以及所有数据和索引。
此操作不可逆转;过期后就没有办法保存了。

3 运行自增列。

删除:这不会重置自动增量列。
例如,即使删除表中的所有数据。
如果有一个自增列(比如ID)还在那里;下次输入数据时,您将从该值继续。

剪切:这将重置自动增加的列。
清除表后,自动增量列将重置为零。

drop:没有必要自动添加列,因为表已经消失了。

4 表现和恢复
处理速度:删除最快,然后剪切删除最慢。
因为删除是逐行完成的这是相当慢的。

数据恢复:您的交易只要不提交就可以删除。
执行剪切后,除非有备份,否则无法保存。

5 使用条件建议
当你想删除一些数据并保留表时。
使用删除。
例如删除非法用户。

如果您想快速清除表格而不必担心恢复,请使用剪切。
例如,日志表无论如何都需要重置。

如果想完全删除表,可以使用drop。
例如,可以直接从项目中删除转储表。

说实话,说到底,你要删多少;不管你想不想恢复。
就看动作快不快。
您必须决定使用哪一个。

MySQL DELETE语句和TRUNCATE TABLE语句的区别

MySQL 中 DELETE 和 TRUNCATE 之间有很大区别。
说实话,这要看使用时的情况。

DELETE 语句,对吗?就一一删除了。
例如,如果找到多行符合条件的行,它会将它们一一删除,并且每一条删除的行都会记录在日志中。
如果要删除特定行,需要添加WHERE子句,如DELETE FROM users WHEREage < 1>速度很慢,尤其是当表中数据很多时。
想想一排一排地删除有多慢。

TRUNCATE TABLE 完全不同。
这直接清空了整个表。
逻辑上相当于删除所有行,但实际中并不是一一删除,而是直接销毁表,然后重新创建一个空表。
所以它比DELETE快得多,快得多。
例如,TRUNCATE TABLE 命令;这时,订单表立即变空。

在交易安全方面,DELETE是安全的,并且可以撤销。
如果您删除了某些内容并发现有问题,您仍然可以将其恢复。
TRUNCATE 不起作用,某些存储引擎不支持回滚。
如果您尝试在交易中 TRUNCATE,您可能会收到错误。

AUTO_INCRMENT 计数器也不同。
DELETE不关心这个,它不会自动重置添加的ID。
TRUNCATE 重置表。
删除表后,下次插入将从1 开始。

返回值也不同。
DELETE 可以告诉您已删除了多少行。
例如,如果删除 5 0 行,则将返回 5 0。
TRUNCATE 不返回此数字。

还有一个表定义文件,这就是TRUNCATE的威力。
即使数据文件或索引文件损坏,只要表结构没问题,TRUNCATE就可以让表清空,相当于重新创建了。
这很容易。

TRUNCATE也可用于分区表,但它不会删除分区,保留分区定义,仅清除分区中的数据。

总而言之,DELETE 适合那些想要控制要删除的行的人。
它主要用于日常生活中。
TRUNCATE 对于那些只想快速清理整个表并进行一般清理的人来说是完美的选择。
新手不要盲目使用TRUNCATE。
如果删除了错误的表,导致所有数据丢失,那就麻烦了。