删除表数据drop、truncate和delete的用法

本文详细解析了SQL中drop、truncate和delete三种表操作的区别及用法。drop彻底删除表结构和内容,truncate仅清除数据保留结构,delete按条件删除行。文章还对比了三者的执行速度和事务特性。

SQL语句中----删除表数据drop、truncate和delete的用法

一、SQL中的语法

   1、drop table 表名称                         eg: drop table  dbo.Sys_Test
   2、truncate table 表名称                     eg: truncate  table dbo.Sys_Test                  
   3、delete from 表名称 where 列名称 = 值      eg: delete from dbo.Sys_Test where test='test'

二、drop,truncate,delete区别

    1、drop (删除表):删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表。

       drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。

    2、truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。

       注意:truncate 不能删除行数据,要删就要把表清空。

    3、delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存

       以便进行进行回滚操作。

       truncate与不带where的delete :只删除数据,而不删除表的结构(定义)

    4、truncate table 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用delete。

       如果要删除表定义及其数据,请使用 drop table 语句。  
    5、对于由foreign key约束引用的表,不能使用truncate table ,而应使用不带where子句的delete语句。由于truncate table 记录在日志中,所以它不能激活触发器。

    6、执行速度,一般来说: drop> truncate > delete。

    7、delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。

             truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。 

### SQL 中 `DROP`、`TRUNCATE` `DELETE` 的区别及使用场景 #### 执行速度比较 从执行速度的角度来看,三者的顺序通常是:`DROP > TRUNCATE >> DELETE`[^1]。 --- #### 功能区分 ##### 1. **`DROP`** - **功能**: 删除整个数据库对象(如视图、索引等),包括结构、数据以及与之关联的权限约束。 - **特点**: - 数据库对象被完全移除,不可逆。 - 不会触发任何触发器,因为它作用于结构而非数据。 - 执行速度非常快,因为直接删除及其所有相关内容。 - **语法**: ```sql DROP TABLE table_name; ``` - **适用场景**: 当需要彻底删除某个及其所有内容时使用。例如,在开发阶段清理不再需要的测试[^4]。 --- ##### 2. **`TRUNCATE`** - **功能**: 清空中的所有数据,但保留的结构(列定义、约束等)。 - **特点**: - 类似于无条件的 `DELETE` 操作,但它不会逐行删除,而是重新分配数据页,因此效率更高。 - 不支持带有外键约束的,除非先解除这些约束。 - 不会产生大量的事务日志记录,适合大规模数据清除。 - 不允许回滚操作。 - **语法**: ```sql TRUNCATE TABLE table_name; ``` - **适用场景**: 需要快速清空中所有数据而不需要保留旧数据的情况下使用。例如,在批量导入新数据前清空现有数据[^3]。 --- ##### 3. **`DELETE`** - **功能**: 删除中的特定行或所有行,具体取决于是否提供了 `WHERE` 条件。 - **特点**: - 支持有条件地删除指定行。 - 每次删除一行都会记录到事务日志中,便于回滚操作。 - 可能会影响性能,尤其是当涉及大量数据时。 - 如果未提供 `WHERE` 子句,则效果类似于 `TRUNCATE`,但由于逐行处理,速度较慢。 - **语法**: ```sql DELETE FROM table_name WHERE condition; -- 或者删除所有行: DELETE FROM table_name; ``` - **适用场景**: 需要基于某些条件删除部分数据或者希望保留事务日志以便回滚时使用。例如,定期清理过期的日志记录[^5]。 --- ### 总结对比格 | 特性 | `DROP` | `TRUNCATE` | `DELETE` | |---------------------|----------------------------------|----------------------------------|----------------------------------| | **目标** | 整个 | 中的所有数据 | 中的部分或全部数据 | | **速度** | 最快 | 较快 | 最慢 | | **日志记录** | 无 | 少 | 多 | | **回滚能力** | 不可回滚 | 不可回滚 | 可回滚 | | **触发器影响** | 不触发 | 不触发 | 触发 | | **适用范围** | 彻底删除 | 快速清空数据 | 精确控制删除 | --- ### 使用注意事项 - 对于生产环境下的敏感数据操作,建议谨慎评估后再决定采用哪种方法。 - 在使用 `TRUNCATE` 或 `DROP` 之前,务必确认已备份重要数据,以免造成不可挽回的损失。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值