Answers:
删除-数据处理语言(DML)
DELETE
任何RDBMS中的语句都被视为DML语句。这种语句也称为CRUD(创建,读取,更新,删除),旨在在不影响对象基础结构的情况下操作数据库中的数据。实际上,这意味着:
DELETE
语句可以通过或者使用谓词微调WHERE
或JOIN
删除表中的部分或全部行。DELETE
语句将被数据库记录,如果该语句失败,可以在事务内被回滚。DELETE
将对要删除的数据进行行级锁定,尽管可以根据需要将其升级为更高级别。DELETE
可以是“慢的”(这是相对的),但由于它的粒度细,所以更安全。截断-数据定义语言(DDL)
TRUCNATE
被认为是DDL语句,这意味着它旨在更改数据库中对象的定义方式。通常,DDL语句是CREATE
,ALTER
或DROP
,但TRUNCATE
具有特定的目的,即通过删除所有行来“重置”表。在RDBMS引擎之间,此方法有所不同,我建议您查看MySQL的详细信息。a的实际含义TRUNCATE
是:
TRUNCATE
不能细颗粒。如果成功,它将从表中删除所有行。TRUNCATE
通常不记录。这取决于RDBMS,我建议您更具体地了解MySQL如何处理它。(提示,因版本而异。)TRUNCATE
需要表元数据锁才能执行。实际实现的方式可能特定于RDBMS,但是从本质上讲,该TRUNCATE
过程必须防止其他进程破坏表以执行其DDL。TRUNCATE
会比a快DELETE
,但安全性较低。拖放表-数据定义语言(DDL)
DROP TABLE
TRUNCATE
它比a更进一步,因为它实际上从数据库中完全删除了表。这包括删除所有关联的对象,例如索引和约束。如果删除了表,则不仅要删除所有数据,还要删除结构。通常将在不再需要表时执行此操作。首先要考虑的是,由于a DROP
是DDL,因此通常无法撤消它。一些RDBMS引擎将允许您将DDL包装在事务中,以便可以将其回滚,但这不是最佳实践,应避免。
尽管我不能代表MySQL,但这是一张快速表格,比较了Oracle中截断和删除的某些方面。
truncate | delete
--------------------------------- | ---------------------------
DDL (implicitly commits, | DML
including any pending DML) |
Does not generate undo info | Generates undo info
(rollback statements) | (rollback statements)
Resets high water mark in table | Does not affect full-scan
and all indexes, improving | performance
full-scan performance |
Does not fire any delete triggers | Fires delete triggers
Priv to truncate cannot be granted | --
to truncate another user's |
table; DROP ANY TABLE system |
priv required |
Storage for table and indexes can | Never shrinks the size of a
be set to initial size | table or indexes
Cannot truncate parent table from | --
an established referential |
integrity constraint; must |
first disable foreign key |
that references the parent |
table |
本书汇编的信息:http : //amzn.com/0470395125
希望这可以像我一样帮助任何偶然浏览此页面的Oracle用户。请随时指出以下几点在MySQL中是否正确,
DROP TABLE TableName
->从数据库中删除表。
TRUNCATE TABLE TableName
->删除表的数据,无条件...并重置IDENTITY
种子值(如果表具有IDENTITY
字段)。
DELETE
:DML命令,如果执行delete命令,则在不更改表结构的情况下删除唯一的DATA结构,我们可以逐行方式回滚数据
TRUNCATE
:DDL命令,如果执行Truncate命令,则在不更改表结构的情况下删除唯一的数据,因此我们无法回滚数据truncate,以PAGE BY PAGE的方式删除数据,truncate更快,然后删除查询
DROP
:,DDL命令,如果执行DROP命令,其删除(删除)数据和总表结构,我们也无法回滚数据