首页 > 数据库 >不同模式下删除Oracle数据表的三个实例

不同模式下删除Oracle数据表的三个实例

时间:2023-03-22 14:14:36浏览次数:40  
标签:name 删除 DROP 数据表 实例 brands Oracle TABLE

首发微信公众号:SQL数据库运维

原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1&sn=450e9e94fa709b5eeff0de371c62072b&chksm=ea37536cdd40da7a94e165ce4b4c6e70fb1360d51bed4b3566eee438b587fa231315d0a5a5b3&token=1491694448&lang=zh_CN#rd


之前总结了ALTER TABLE的五种用法:Oracle中ALTER TABLE的五种用法(点击文字可跳转),现在以实例的方式详细讲解下Oracle DROP TABLE语句删除表。

语法简介

要将表移动到回收站或将其从数据库中完全删除,可以使用DROP TABLE语句:

DROP TABLE schema_name.table_name
[CASCADE CONSTRAINTS | PURGE];

在这个语句中:

  • 首先,指出要在DROP TABLE子句之后删除的表及其模式。如果不明确指定模式名称,则该语句假定将从模式中删除该表。

  • 其次,指定CASCADE CONSTRAINTS子句删除引用表中主键和唯一键的所有参照完整性约束。如果存在这种引用完整性约束,并且不使用此子句,Oracle将返回错误并停止删除表。

  • 第三,如果想删除表格并且一次释放与之关联的空间,指定PURGE子句。通过使用PURGE子句,Oracle不会将表及其依赖对象放入回收站。

请注意:PURGE子句不允许您回滚或恢复删除的表。因此,如果不希望敏感数据出现在回收站中,这很有用。


1. 基本的Oracle DROP TABLE示例

首先创建一个persons测试表

CREATE TABLE persons (
    person_id NUMBER,
    first_name VARCHAR2(50) NOT NULL,
    last_name VARCHAR2(50) NOT NULL, 
    PRIMARY KEY(person_id)
);

其次,删除这个persons测试表

DROP TABLE persons;

2. Oracle DROP TABLE CASCADE CONSTRAINTS示例

创建两个名为brands和cars的新表:

--表1:汽车品牌
CREATE TABLE brands(
    brand_id NUMBER PRIMARY KEY,
    brand_name varchar2(50)
);
--表2:汽车
CREATE TABLE cars(
    car_id NUMBER PRIMARY KEY,
    make VARCHAR(50) NOT NULL,
    model VARCHAR(50) NOT NULL,
    year NUMBER NOT NULL,
    plate_number VARCHAR(25),
    brand_id NUMBER NOT NULL,

    CONSTRAINT fk_brand 
    FOREIGN KEY (brand_id) 
    REFERENCES brands(brand_id) ON DELETE CASCADE
);

在这些表中,每个品牌有一个或更多的汽车,而每辆汽车只有一个品牌。

以下语句尝试删除brands表:

DROP TABLE brands;

Oracle提示以下错误:

 

这是因为brands表的主键当前由cars表中的brand_id列引用。

以下语句返回cars表的所有外键约束:

SELECT
    a.table_name,
    a.column_name,
    a.constraint_name,
    c.owner,
    c.r_owner,
    c_pk.table_name r_table_name,
    c_pk.constraint_name r_pk
FROM
    all_cons_columns a
JOIN all_constraints c ON
    a.owner = c.owner
    AND a.constraint_name = c.constraint_name
JOIN all_constraints c_pk ON
    c.r_owner = c_pk.owner
    AND c.r_constraint_name = c_pk.constraint_name
WHERE
    c.constraint_type = 'R'
    AND a.table_name = 'CARS';

 

 要删除brands表,必须使用CASCADE CONSTRAINTS子句,如下所示:

DROP TABLE brands CASCADE CONSTRAINTS;

这个语句不仅删除了brands表,而且还删除了cars表中的外键约束fk_brand。

如果再次执行语句以获取cars表中的外键约束,则不会看到任何返回的行。


 

3.Oracle DROP TABLE PURGE示例

以下语句使用PURGE子句来删除cars表:

DROP TABLE cars purge;

扩展知识:批量删除多个数据表

Oracle不提供直接删除多个表的方法。但是,可以使用以下PL/SQL块来执行此操作:

下面来测试下,新建测试表:

--新建测试表
CREATE TABLE test_1(c1 VARCHAR2(50));
CREATE TABLE test_2(c1 VARCHAR2(50));
CREATE TABLE test_3(c1 VARCHAR2(50));

使用PL/SQL块删除名称以TEST_开头的所有表。

BEGIN
  FOR rec IN
    (
      SELECT
        table_name
      FROM
        all_tables
      WHERE
        table_name LIKE 'TEST_%'
    )
  LOOP
    EXECUTE immediate 'DROP TABLE '||rec.table_name||' CASCADE CONSTRAINTS';
  END LOOP;
END;
/    -- 该符号表示执行这段PL/SQL代码

注意:如果在PLSQL Developer工具内执行以上语句时,出现ORA-06550 PLS-00103 报错记录,记得仔细检查下是不是哪个语句分号“;”少了一个!

标签:name,删除,DROP,数据表,实例,brands,Oracle,TABLE
From: https://www.cnblogs.com/since-1995/p/17242843.html

相关文章

  • 大爽Python入门教程 7-6 面向对象编程 实例演示 简易方格游戏(二维)
    大爽Python入门公开课教案点击查看教程总目录1介绍将上一节,一维的面板拓展成二维的。面板数据从txt中读取出来玩家从左上进入,输入一串移动命令,展示中间过程玩家......
  • 使用百度UNIT搭建智能对话系统_订火车票实例
    今天我们来一个没有代码的教程,无需编程基础也能学会搭建智能对话系统,在学习之前,我们先来了解一下对话系统的专业术语:单轮对话:简单的一问一答,问题可以用一句话来描述,......
  • 一统天下 flutter - dart: 其它(用调用函数的方式调用类的实例,生成器)
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-dart:其它(用调用函数的方式调用类的实例,生成器)示例如下:lib\dart\othe......
  • android 只起一个Activity实例
    在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种。[b]方法一:设置起动模式[/b]一个Activity......
  • oracle使用存储过程返回游标实现报表查询
    最近在oracle中通过存储过程实现一个报表查询,查询涉及到数据计算这里使用了临时表和存储过程实现输出查询,java接受游标变量返回结果集第一步、创建统计使用的临时表CREA......
  • SQL之数据表删除
    1、delete基本语法DELETEFROM表名[WHERE条件表达式];2、删除部分记录deletefromstudentwhereage=14;3、删除全部数据deletefromstudent;5、truncate......
  • SQL之数据表更新数据
    1、update基本语法UPDATE表名SET字段名1=值1[,字段名2=值2,…][WHERE条件表达式];2、更新部分数据updatestudentsetage=20,gender='female'wherename='to......
  • SQL之操作数据表基操
    1、创建数据表createtablestudent(idint,namevarchar(20),gendervarchar(10),birthdaydate);2、查看当前数据库中所有数据表showtables;3、查看......
  • socket 实例 转载
    C#(99):Socket嵌套字通讯目录一、socket是什么二、套接字的工作流程三、服务端四、客户端五、Socket对象的成员1、属性2、方法 一、socket是什么Socke......
  • Spring自动创建实例
    动态的调用无参构造方法来创建实例.Classclazz=ClassUtils.forName(className);executor=(ReportExecutor)BeanUtils.instantiateClass(clazz)......