在本教程中,我们来学习如何使用SQL TRUNCATE TABLE语句高效,快速地删除表中的所有数据。

1. SQL TRUNCATE TABLE语句简介

要删除表中的所有数据,可使用不带WHERE子句的DELETE语句。 但是对于具有几百万行的大表,DELETE语句很慢且效率不高。

要快速删除大表中的所有行,使用以下TRUNCATE TABLE语句:

TRUNCATE TABLE table_name;

在此语法中,指定要在TRUNCATE TABLE子句后删除数据的table_name。

某些数据库系统(如MySQL和PostgreSQL)允许直接省略TABLE关键字,因此TRUNCATE TABLE语句如下所示:

TRUNCATE table_name;

发出TRUNCATE TABLE语句时,数据库系统通过取消分配表分配的数据页来删除表中的所有行。 通过这样做,RDBMS可以减少日志记录的资源和需要获取的锁的数量。

如果要一次截断多个表,可以在TRUNCATE TABLE子句后使用逗号分隔的表名列表,如下所示:

TRUNCATE TABLE table_name1, table_name2, ...;

并非所有数据库系统都支持这种使用TRUNCATE TABLE语句来一次删除多个表。 如果不使用,则要发出多个TRUNCATE TABLE语句来截断多个表。

2. SQL TRUNCATE TABLE与DELETE

逻辑上,TRUNCATE TABLE语句和不带WHERE子句的DELETE语句提供了从表中删除所有数据的相同效果。 但是,它们确实存在一些差别:

使用DELETE语句时,数据库系统会记录操作。 通过一些努力,可以回滚已删除的数据。 但是,当使用TRUNCATE TABLE语句时,除非在尚未提交的事务中使用它,否则无法回滚。

要从外键约束引用的表中删除数据,不能使用TRUNCATE TABLE语句。 在这种情况下,必须使用DELETE语句。

如果表具有与之关联的触发器,则TRUNCATE TABLE语句不会触发delete触发器。

执行TRUNCATE TABLE语句后,某些数据库系统会将自动增量列(或标识,序列等)的值重置为其起始值。 DELETE语句不是这种情况。

带有WHERE子句的DELETE语句从表中删除部分数据,而TRUNCATE TABLE语句始终从表中删除所有数据。

3. SQL TRUNCATE TABLE示例

下面我们来看一个截断表的例子。

首先,创建一个名为big_table的新表,如下所示:

CREATE TABLE big_table (

id INT AUTO_INCREMENT PRIMARY KEY,

val INT

);

其次,如果要将样本数据插入big_table表,请多次执行以下语句:

INSERT INTO big_table (val)

VALUES

(RAND(100000));

请注意,如果使用支持存储过程的数据库系统,则可以将此语句放在循环中。 例如,MySQL中的以下存储过程将数据加载到big_table表中,其中包含num参数指定的行数。

DELIMITER $$

CREATE PROCEDURE load_big_table_data(IN num int)

BEGIN

DECLARE counter int default 0;

WHILE counter < num DO

INSERT INTO big_table(val)

VALUES(RAND(1000000));

END WHILE;

END$$

以下语句调用load_big_table_data存储过程将999999行数据插入到big_table表。

CALL load_big_table_data(999999)

第三,要删除big_table中所有数据,请使用以下语句:

TRUNCATE TABLE big_table;

如上所见,TRUNCATE TABLE语句的速度有多快。

现在我们已经学习了如何使用TRUNCATE TABLE语句来快速删除大表中的所有数据,并理解TRUNCATE TABLE和DELETE语句之间的差异。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

oracle truncate table语法,SQL Truncate Table相关推荐

  1. PostgreSQL Oracle 兼容性 之 - PL/SQL record, table类型定义

    背景 Oracle PL/SQL是非常强大的一门SQL编程语言,许多Oracle用户也使用它来处理一些要求延迟低且数据一致性或可靠性要求很高的业务逻辑. PostgreSQL也有一门非常高级的内置SQ ...

  2. mysql create很多table,SQL CREATE TABLE 语句

    原标题:SQL CREATE TABLE 语句 SQL CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. 表由行和列组成,每个表都必须有个表名. SQL CREAT ...

  3. 史上最全近百条Oracle DBA日常维护SQL脚本指令

    查询碎片程度高(实际使用率小于30%)的表 可以收缩的表条件为什么block>100,因为一些很小的表,只有几行数据实际大小很小,但是block一次性分配就是5个(11g开始默认一次性分配1M的 ...

  4. Oracle创建表语句(Create table)语法详解及示例

    Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...

  5. oracle cast multiset table 语法演示

    http://blog.csdn.net/viszl/article/details/6543158 处理数据库关系对象组件时会用到这个奇怪的语法,下面参照<oracle 编程艺术>中的例 ...

  6. multiset用法 oracle,oracle cast multiset table 语法演示

    处理数据库关系对象组件时会用到这个奇怪的语法,下面参照中的例子结合嵌套表解释这个语法 首先建立嵌套表 create or replace type emp_type as object (empno ...

  7. SQL ALTER TABLE 语句

    SQL ALTER TABLE 语句 ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.删除或修改列. SQL ALTER TABLE 语法 如需在表中添加列,请使用下面 ...

  8. sql truncate_如何在SQL Delete和SQL Truncate语句后使用数据库备份恢复数据

    sql truncate This article explores the recovery of data removed by SQL Delete and SQL Truncate state ...

  9. Oracle数据库常用基本SQL语法

    标题 Oracle数据库常用基本SQL语法 1.表的创建.插入,删除及Oracle和mysql的数据类型的区别 create table item (item_id number(5) primary ...

最新文章

  1. 那个脑袋生锈的我写的东西
  2. 汽车保险解读:解析涉水损失险与自燃险
  3. IntelliJ idea 12的初次约会
  4. python程序设计基础第三版_Python程序设计(第三版)PPT及源码
  5. 大数据实时分析平台应用在哪些场景
  6. 在类库中使用Session
  7. pythonsample_python sample code | 学步园
  8. 16种常用的数据分析方法-聚类分析
  9. 《深入J2SDK》 总结
  10. 打开和设置IDEA欢迎界面
  11. java旅游管理项目描述,201Java基于SpringBoot框架的旅游管理系统
  12. 【UE5 C++进阶 01】Nanite基础
  13. Hyperlynx使用心得
  14. 《方块方舟》自定义服务器工具,方舟方块世界服务器建立方法
  15. android上传图片被旋转,解决android有的手机拍照后上传图片被旋转的问题
  16. 6-5 Approximating Eigenvalues (40分)
  17. 四:MySQL 表介绍
  18. 解决前端vue中的Uncaught TypeError: this.Form is undefined
  19. 最近迅雷 4.0正式发布!教你轻松精简你的迅雷4.0~
  20. python使用ffmpeg去掉视频片头和片尾

热门文章

  1. c语言求最大公约数(c语言求最大公约数和最小公倍数代码)
  2. 闲鱼平台多卖家出售真人妇科检查视频 回应:已下架
  3. SQL Server要求查询所有姓‘’王‘’的员工信息
  4. 压缩感知——大白话版
  5. H3C irf交换机故障替换演练
  6. 使命召唤9用计算机,应该怎么设?使命召唤9 分辨率那些破事
  7. 学历真的比能力经验重要吗?
  8. Python入门习题大全——立方
  9. jdbc连接云数据库mysql_如何通过JDBC连接MySQL数据库
  10. 怎么在电脑上玩失落城堡手游 失落城堡安卓模拟器玩法教程