自学内容网 自学内容网

drop、delete与truncate的区别和语法规则

目录

1.DROP TABLE

2.DELETE FROM

3.TRUNCATE TABLE

总结

以上为删除表,删除字段(列)语法如下

DDL和DML简述

事务简述


在关系型数据库中,DROPDELETE 和 TRUNCATE 都是用来处理数据的 SQL 语句,但它们的目的和效果有所不同

1.DROP TABLE

DROP TABLE table_name;
  • 作用:
    • 删除整个表结构及其所有数据,包括表的索引、触发器、约束和其他相关对象。
    • 执行 DROP TABLE 后,表从数据库中永久移除,不能再访问该表的数据,也无法回滚此操作。
    • 如果有其他对象依赖于该表,必须先解除依赖,否则可能会导致删除失败。

2.DELETE FROM

DELETE FROM table_name [WHERE condition];
  • 作用
    • 删除表中的某些行或所有行(如果不指定 WHERE 子句,则删除所有行)。
    • DELETE 是 DML(Data Manipulation Language)语句,执行删除时会在事务日志中记录每一行的变化,因此可以通过事务回滚恢复数据。
    • 删除操作可以有条件地进行,可以根据指定的条件来决定哪些行应该被删除。
    • 删除数据后,表结构依然存在,但所占空间不一定立即回收,可通过 VACUUM(在PostgreSQL和SQLite中)或 DBCC SHRINKDATABASE(在SQL Server中)等命令来收缩数据库文件大小。
    • 删除操作会触发任何关联的删除触发器。

3.TRUNCATE TABLE

TRUNCATE TABLE table_name;
  • 作用
    • 清空表中的所有数据,但保留表结构。
    • TRUNCATE 也是 DDL(Data Definition Language)语句,但在某些数据库系统中它被视为一种特殊类型的 DML 语句。
    • 与 DELETE 相比,TRUNCATE 更高效,因为它不记录单行删除操作,而是直接清空表数据,因此速度更快,且不会产生事务日志记录(除非在支持事务的环境中启用了特殊的日志选项)。
    • TRUNCATE 操作不可回滚,也不会触发触发器。
    • 清空表后,表的自增序列(在支持自动增长的列如 Oracle 的 IDENTITY 或 SQL Server 的 IDENTITY 列)会被重置为初始值。
    • 表空间会立即回收,对于大型表的快速清空尤其有用。

总结

  • 需要彻底删除一个表以及与其相关的所有内容时,使用 DROP TABLE
  • 删除表中的一部分数据且希望支持事务回滚和触发器时,使用 DELETE FROM
  • 快速清空一个表的所有数据不关心事务回滚,并且希望尽快释放存储空间且无需触发器干预时,使用 TRUNCATE TABLE
  • drop> truncate >delete

以上为删除表,删除字段(列)语法如下

        在数据库中删除字段(列)的操作通常只涉及到DDL(Data Definition Language)语句中的 ALTER TABLE 语句,而 DROP 和 DELETE 语句并不直接用于删除字段。

ALTER TABLE 表名 DROP COLUMN 字段(列)名;

这条语句会从对应表中永久删除目标字段。删除字段后,该字段及其所有数据将不再可用,而且这个操作不可逆。

DDL和DML简述

DDL:影响表结构

DML:影响表数据

DDL (数据定义语言): DDL 语句主要用于创建、修改和删除数据库的结构元素,如表、视图、索引、存储过程、触发器等。这些语句定义了数据库的逻辑结构,并不直接影响数据本身。DDL 语句的特点是它们通常是隐式提交的,一旦执行就无法回滚。

常见的 DDL 命令包括:

  • CREATE: 创建新的数据库对象,如 CREATE DATABASECREATE TABLECREATE INDEX 等。
  • ALTER: 修改数据库对象的结构,如 ALTER TABLEALTER INDEX 等。
  • DROP: 删除数据库对象,如 DROP TABLEDROP DATABASEDROP INDEX 等。

DML (数据操作语言): DML 语句则是用来查询、插入、更新和删除数据库中的数据。DML 语句作用于数据库的实际内容,允许用户对数据进行各种操作。

常见的 DML 命令包括:

  • SELECT: 查询数据库中的数据。
  • INSERT: 插入新的数据行到表中。
  • UPDATE: 更新表中已存在的数据行。
  • DELETE: 删除表中的数据行。

DML 语句可以在事务内执行,并且默认情况下,只有当事务被明确提交 (COMMIT) 时,所做的更改才会永久保存到数据库中。如果不提交,可以使用 ROLLBACK 命令撤销在事务内的所有更改。而在执行 DDL 语句时,大多数数据库管理系统会自动提交当前事务,即使事务尚未显式提交。这意味着在 DDL 语句执行后,之前的未提交的 DML 变更也会被提交,且 DDL 本身的执行不可回滚。

事务简述

SQL中的事务(Transaction)是一种机制,用于维护数据库操作的完整性、一致性和可靠性。事务是一个不可分割的工作单元,包含了一系列针对数据库的读写操作。在事务管理下,数据库保证这些操作要么全部成功执行,要么全部不执行,即遵循“原子性”原则。

事务具有以下核心特性,通常称为ACID特性:

  • 原子性(Atomicity):事务是一个原子操作,事务中的所有操作都必须作为一个整体完成,如果其中一个操作失败,那么整个事务就会失败,之前的所有操作都会被撤销,保持数据库处于一致状态。

  • 一致性(Consistency):事务完成后,数据库将处于一致性状态,即事务将数据库从一个有效状态转变为另一个有效状态,遵守所有的业务规则和约束。

  • 隔离性(Isolation):并发执行的事务彼此独立,互不影响。即使多个事务同时进行,每个事务看到的数据都是如同其他事务没有同时进行一样的状态。数据库系统通过锁定机制和事务隔离级别来实现这一特性。

  • 持久性(Durability):一旦事务提交,它对数据库的修改就被永久保存下来,即使出现系统故障也能保证数据不会丢失。

事务的主要作用在于:

  1. 数据完整性保护:确保一系列操作在遇到异常时能够恢复至事务开始前的状态,防止因部分操作成功而导致的数据不一致。

  2. 并发控制:通过事务管理来协调多用户环境下对同一数据的并发访问,避免脏读、不可重复读、幻读等问题。

  3. 业务流程控制:事务可对应复杂的业务逻辑,确保一系列相关操作要么全部完成,要么全部回滚,符合业务预期。

通过BEGIN TRANSACTION、COMMIT和ROLLBACK等SQL语句,开发者可以手动控制事务的开始、提交和回滚,确保数据库的一致性和可靠性。


原文地址:https://blog.csdn.net/qq_45927587/article/details/138239268

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!