drop、delete与truncate的区别和语法规则
目录
在关系型数据库中,DROP
、DELETE
和 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 DATABASE
、CREATE TABLE
、CREATE INDEX
等。ALTER
: 修改数据库对象的结构,如ALTER TABLE
、ALTER INDEX
等。DROP
: 删除数据库对象,如DROP TABLE
、DROP DATABASE
、DROP INDEX
等。
DML (数据操作语言): DML 语句则是用来查询、插入、更新和删除数据库中的数据。DML 语句作用于数据库的实际内容,允许用户对数据进行各种操作。
常见的 DML 命令包括:
SELECT
: 查询数据库中的数据。INSERT
: 插入新的数据行到表中。UPDATE
: 更新表中已存在的数据行。DELETE
: 删除表中的数据行。
DML 语句可以在事务内执行,并且默认情况下,只有当事务被明确提交 (COMMIT
) 时,所做的更改才会永久保存到数据库中。如果不提交,可以使用 ROLLBACK
命令撤销在事务内的所有更改。而在执行 DDL 语句时,大多数数据库管理系统会自动提交当前事务,即使事务尚未显式提交。这意味着在 DDL 语句执行后,之前的未提交的 DML 变更也会被提交,且 DDL 本身的执行不可回滚。
事务简述
SQL中的事务(Transaction)是一种机制,用于维护数据库操作的完整性、一致性和可靠性。事务是一个不可分割的工作单元,包含了一系列针对数据库的读写操作。在事务管理下,数据库保证这些操作要么全部成功执行,要么全部不执行,即遵循“原子性”原则。
事务具有以下核心特性,通常称为ACID特性:
-
原子性(Atomicity):事务是一个原子操作,事务中的所有操作都必须作为一个整体完成,如果其中一个操作失败,那么整个事务就会失败,之前的所有操作都会被撤销,保持数据库处于一致状态。
-
一致性(Consistency):事务完成后,数据库将处于一致性状态,即事务将数据库从一个有效状态转变为另一个有效状态,遵守所有的业务规则和约束。
-
隔离性(Isolation):并发执行的事务彼此独立,互不影响。即使多个事务同时进行,每个事务看到的数据都是如同其他事务没有同时进行一样的状态。数据库系统通过锁定机制和事务隔离级别来实现这一特性。
-
持久性(Durability):一旦事务提交,它对数据库的修改就被永久保存下来,即使出现系统故障也能保证数据不会丢失。
事务的主要作用在于:
-
数据完整性保护:确保一系列操作在遇到异常时能够恢复至事务开始前的状态,防止因部分操作成功而导致的数据不一致。
-
并发控制:通过事务管理来协调多用户环境下对同一数据的并发访问,避免脏读、不可重复读、幻读等问题。
-
业务流程控制:事务可对应复杂的业务逻辑,确保一系列相关操作要么全部完成,要么全部回滚,符合业务预期。
通过BEGIN TRANSACTION、COMMIT和ROLLBACK等SQL语句,开发者可以手动控制事务的开始、提交和回滚,确保数据库的一致性和可靠性。
原文地址:https://blog.csdn.net/qq_45927587/article/details/138239268
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!