删除vs截断
SQL(结构查询语言)命令Delete和Truncate都用于删除数据库中表中存储的数据。Delete是一个DML(数据操作语言)语句,它删除表中的部分或所有行。“Where子句”用于指定需要删除的行,如果Where子句未与Delete语句一起使用,它将删除表中的所有数据。Truncate是一个DDL(数据定义语言)语句,它从表中删除整个数据。这两个命令都不会破坏表结构和对表的引用,只会根据需要删除数据。
删除语句
Delete语句允许用户根据指定的条件从数据库中的现有表中删除数据,而“Where子句”用于确定此条件。Delete命令被称为日志执行,因为它一次只删除一行,并在事务日志中为每一行删除保留一个条目。所以,这会导致操作变慢。Delete是一个DML语句,因此在执行命令时不会自动提交它。因此,如果需要,可以回滚删除操作以再次访问数据。在执行Delete命令之后,应该提交或回滚它,以便永久保存更改。Delete语句不会从数据库中删除表的表结构。它也不会释放表使用的内存空间。
Delete命令的典型语法如下所述。
从<;表格名称中删除>;
或
从<;table_name>;WHERE<;condition>;中删除;
截断语句
Truncate语句删除数据库中现有表中的所有数据,但它保留相同的表结构、完整性约束、访问权限和与其他表的关系。因此,如果用户希望再次重用表,则不需要重新定义表,并且可以使用旧的表结构。Truncate通过取消分配用于保存数据的数据页来删除整个数据,而事务日志中只保留这些页释放。因此,truncate命令只使用较少的系统和事务日志资源进行操作,因此它比其他相关命令更快。Truncate是一个DDL命令,因此它在语句执行前后使用自动提交。因此,truncate不能以任何方式再次回滚数据。它在执行之后释放表使用的内存空间。但是Truncate语句不能应用于由外键约束引用的表。
下面是Truncate语句的常用语法。
截断表格<;表格名称>;
Delete和Truncate有什么区别?1Delete和Truncate命令从数据库中现有的表中删除数据,而不会损害表结构或对表的其他引用。但是,Delete命令只能用于删除使用相关条件的表中的特定行,也可以用于不带任何条件地删除所有行,而Truncate命令只能用于删除表中的整个数据。Delete是一个DML命令,它可以根据需要回滚操作,但是Truncate是一个DDL命令,因此它是一个自动提交语句,不能以任何方式回滚。因此,在数据库管理中谨慎使用该命令是非常重要的。Truncate操作比Delete操作消耗更少的系统资源和事务日志资源,因此Truncate被认为比Delete更快。另外,Delete不会释放表所使用的空间,而Truncate则释放执行后使用的空间,因此从数据库表中删除整个数据时,Delete的效率不高。但是,当表被外键约束引用时,不允许使用Truncate,在这种情况下,可以使用Delete命令代替Truncate.7。最后,这两个命令在数据库管理系统中的应用既有优点也有缺点,用户应该意识到适当地使用这些命令以获得良好的效果。 |