在本教程中,您将学习如何使用Oracle TRUNCATE TABLE语句更快更有效地从表中删除所有数据(也叫截断表)。

Oracle TRUNCATE TABLE语句简介

如果要从表中删除所有数据,可以使用不带WHERE子句的DELETE语句,如下所示:

DELETE FROM table_name;

对于有少量行记录的表,DELETE语句做得很好。 但是,当拥有大量行记录的表时,使用DELETE语句删除所有数据效率并不高。

Oracle引入了TRUNCATE TABLE语句,用于删除大表中的所有行。

以下说明了Oracle TRUNCATE TABLE语句的语法:

TRUNCATE TABLE schema_name.table_name

[CASCADE]

[[ PRESERVE | PURGE] MATERIALIZED VIEW LOG ]]

[[ DROP | REUSE]] STORAGE ]

默认情况下,要从表中删除所有行,请指定要在TRUNCATE TABLE子句中截断的表的名称:

TRUNCATE TABLE table_name;

在这种情况下,因为我们没有明确指定模式名称,所以Oracle假定从当前的模式中截断表。

如果表通过外键约束与其他表有关系,则需要使用CASCADE子句:

TRUNCATE TABLE table_name

CASCADE;

在这种情况下,TRUNCATE TABLE CASCADE语句删除table_name表中的所有行,并递归地截断链中的关联表。

请注意,TRUNCATE TABLE CASCADE语句需要使用ON DELETE CASCADE子句定义的外键约束才能工作。

通过MATERIALIZED VIEW LOG子句,可以指定在表上定义的物化视图日志是否在截断表时被保留或清除。 默认情况下,物化视图日志被保留。

STORAGE子句允许选择删除或重新使用由截断行和关联索引(如果有的话)释放的存储。 默认情况下,存储被删除。

请注意,要截断表,它必须在您自己的模式中,或者必须具有DROP ANY TABLE系统权限。

Oracle TRUNCATE TABLE示例

下面我们来看看使用TRUNCATE TABLE语句来删除表的一些例子。

1. Oracle TRUNCATE TABLE简单的例子

以下语句创建一个名为customers_copy的表,并从示例数据库中的customers表复制数据:

CREATE TABLE customers_copy

AS

SELECT

*

FROM

customers;

要从customers_copy表中删除所有行,请使用以下TRUNCATE TABLE语句:

TRUNCATE TABLE customers_copy;

2. Oracle TRUNCATE TABLE CASCADE示例

首先,创建用来演示的两个表:quotations和quotation_items表:

CREATE TABLE quotations (

quotation_no NUMERIC GENERATED BY DEFAULT AS IDENTITY,

customer_id NUMERIC NOT NULL,

valid_from DATE NOT NULL,

valid_to DATE NOT NULL,

PRIMARY KEY(quotation_no)

);

CREATE TABLE quotation_items (

quotation_no NUMERIC,

item_no NUMERIC ,

product_id NUMERIC NOT NULL,

qty NUMERIC NOT NULL,

price NUMERIC(9 , 2 ) NOT NULL,

PRIMARY KEY (quotation_no , item_no),

CONSTRAINT fk_quotation FOREIGN KEY (quotation_no)

REFERENCES quotations

ON DELETE CASCADE

);

接下来,在这两个表中插入一些行:

INSERT INTO quotations(customer_id, valid_from, valid_to)

VALUES(100, DATE '2017-09-01', DATE '2017-12-01');

INSERT INTO quotation_items(quotation_no, item_no, product_id, qty, price)

VALUES(1,1,1001,10,90.5);

INSERT INTO quotation_items(quotation_no, item_no, product_id, qty, price)

VALUES(1,2,1002,20,200.5);

INSERT INTO quotation_items(quotation_no, item_no, product_id, qty, price)

VALUES(1,3,1003,30, 150.5);

然后,截断quotatios表:

TRUNCATE TABLE quotations;

执行语句失败,Oracle返回以下错误:

SQL Error: ORA-02266: unique/primary keys in table referenced by enabled foreign keys

要解决这个问题,可以将CASCADE子句添加到上面的TRUNCATE TABLE语句中:

TRUNCATE TABLE quotations CASCADE;

这个语句不仅从quotations表中删除数据,而且还从quotation_items表中删除数据。最后,验证是否删除了quotations和quotation_items中的数据:

SELECT

*

FROM

quotations;

SELECT

*

FROM

quotation_items;

请注意,如果没有为fk_quotation约束指定ON DELETE CASCADE,则上面的TRUNCATE TABLE CASCADE语句将失败。

在本教程中,我们学习了如何使用Oracle TRUNCATE TABLE语句更快更有效地从表中删除所有数据。

¥ 我要打赏

纠错/补充

收藏

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

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

oracle 截断数据库,Oracle截断表相关推荐

  1. oracle查有哪些数据库,oracle查询数据库(oracle查询所有数据库)

    oracle查询数据库(oracle查询所有数据库) 2020-07-24 12:01:17 共10个回答 PLsql查询工具便可查询 你指所有的表吗?如果你想查数据库中所有的表的话,可以查询sele ...

  2. oracle跨数据库复制数据表-dblink

    -一.最近有一个这样的需求,之前的数据库(部署在4.9),进程不足,需要迁移 到新的数据库(2.77),包括表结构和表数据,一个一个复制着实比较麻烦,在网上百度了下,才知道有dblink这种实现方式, ...

  3. 数据库oracle 笔试,数据库oracle笔试

    1. 数据库中使用update修改多个字段值的问题 经我在PL/SQL环境下调试,得出如下结论(scott/tiger 下的dept表): update dept set dname='yao', l ...

  4. oracle停数据库,oracle数据库停止命令

    linux/Aix启动.关闭Oracle及监听 Aix环境下管理Oracle 1.Aix下查看.启动数据库监听器 以oracle用户执行以下命令: ① lsnrctl status //-查看监听器状 ...

  5. oracle内部函数,[数据库]Oracle内置函数

    [数据库]Oracle内置函数 0 2020-08-21 19:00:31 lpad()函数:用于左补全字符串. 例:lpad('原始数据','预期长度','填充字符') ,lpad('123','5 ...

  6. Oracle将数据库中的表数据导入到另一个数据库中

    因为工作需要,把Oracle数据库1中的表数据导入到相同数据结构的数据库2表中,下面将数据库1简称为DB1,数据库2简称为DB2,刚开始的时候我只是简单的将DB1的表数据导出成sql脚本,然后导入到D ...

  7. Oracle清空数据库中数据表数据的方法

    一.简介 最近在项目发版测试的时候,导出dmp的时候不小心把开发库中的一些脏数据导出来了,测试那边导入进去之后一堆不规范的数据,为了不影响测试结果,于是总结了一个快速清空数据库数据表所有数据的方法. ...

  8. Oracle查询数据库中所有表的记录数

    方法一: 首先建立一个计算函数 >>>>>>>>>>>>>>>>>>>>> ...

  9. oracle 查询数据库中所有表名

    SELECT* FROMall_tables WHEREOWNER = '实例名称' ORDER BY table_name

最新文章

  1. BZOJ2331:[SCOI2011]地板——题解
  2. CommonJs和AMD是什么(20170214)
  3. golang 打印函数名/文件名/行号 Callers
  4. 达特茅斯计算机专业师资力量如何,达特茅斯学院计算机科学computer science专业排名第126~150名(2020THE泰晤士高等教育世界大学排名)...
  5. php integer
  6. 计算机网络:Socket网络通信底层数据传输
  7. 单例模式可以分为懒汉式和饿汉式:     懒汉式单例模式:在类加载时不初始化。     饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
  8. 使用WeUI+JS 的label包含input触发两次的问题
  9. 关于最近打的几题斜率优化的总结。加几AC代码。
  10. 超级楼梯[HDU2041]
  11. NUC1014 排版题.输出排列成菱形的字母【打印图案】
  12. C#winform可视化(当主窗体不能拖动时)
  13. 安装索引源码阅读工具 lxr 安装配置初探
  14. java判断map是否为空_Java自定义Exception
  15. Python Class System
  16. 淘宝开源网络框架tbnet之buffer
  17. 《机关单位办公自动化应用指南 (基于国产信息技术应用创新终端)》
  18. ASPX一句话及一句话客户端
  19. Java资深开发:这不得40k起步呀
  20. 批处理系统脱机使用计算机,1.2.2 脱机输入/输出和批处理系统

热门文章

  1. html如何在页面打开时让鼠标光标停留在某个表单文本框,网页制作实用技巧
  2. JS实现复制页面文字弹出消息提醒/在sweetalert(swal)弹出窗插件中加入html代码
  3. 为什么mysql不建议执行超过3表以上的多表关联查询?
  4. 易语言调用子程序_ c,易语言汇编调用子程序源码
  5. 【js】不间断空格 特殊的空格-ASCII码值160
  6. 服务器win10系统开机慢,三种方法教你解决Win10系统开机慢,爱纯净官网
  7. 显示空闲链表和隐式空闲链表_使用空闲资源添加Espresso UI测试
  8. 2020年某计算机菜鸡的中九保研之旅(武大、华科、北理、西交、中山)
  9. GBase 8c 的安全特性
  10. Android+如何导出微信照片,【每天3分钟】微信占了好多G,教你一步批量提取微信照片并清理空间...