不同模式下删除Oracle数据表的三个实例
首发微信公众号:SQL数据库运维
之前总结了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 报错记录,记得仔细检查下是不是哪个语句分号“;”少了一个!
不同模式下删除Oracle数据表的三个实例的更多相关文章
- linux下导入oracle数据表
提前说明:这个是默认oracle已经安装好切数据库默认表空间已经创建好.之后将数据表dmp文件直接导入到默认表空间里(默认表空间不用再指定,因为创建数据库时已经指定默认表空间) linux命令如下: ...
- C# - VS2019 通过DataGridView实现对Oracle数据表的增删改查
前言 通过VS2019建立WinFrm应用程序,搭建桌面程序后,通过封装数据库操作OracleHelper类和业务逻辑操作OracleSQL类,进而通过DataGridView实现对Oracle数据表 ...
- SQL Sever实验一 创建和删除数据库数据表
一. 实验目的 1. 熟悉SQL Server 2008 中SQL Server Management Studio的环境 2. 了解SQL Server ...
- Oracle数据表转换为Shapefile(二)
在上一篇博文<Oracle数据表转换为Shapefile(一)>中详细描述了一种基于Oracle数据表生产Shapefile的技术方法,本文同样以详细图解的方式描述一种更便捷的方法来完成同 ...
- Oracle数据表转换为Shapefile(一)
严格来说,文章标题中的“转换”并不完全合适.本文的主要内容是基于Oracle数据表的数据来生产出Shapefile文件.进行该工作的一个前提条件是:Oracle数据表中包含坐标数值字段,一般来说就是x ...
- 详解Oracle数据货场中三种优化:分区、维度和物化视图
转 xiewmang 新浪博客 本文主要介绍了Oracle数据货场中的三种优化:对分区的优化.维度优化和物化视图的优化,并给出了详细的优化代码,希望对您有所帮助. 我们在做数据库的项目时,对数据货场的 ...
- linux 下使用exp/imp 或者expdp/impdp导出导入oracle数据表数据
一.环境配置 1.执行环境: exp/imp可以在客户端执行也可以在服务器端执行,在客户端执行需要先安装有oracle的客户端,如果是linux系统,就是以oracle用户登录,在控制台下执行.建议在 ...
- Oracle11完全卸载方法 deinstall.bat如何用以及如何删除oracle注册表
转自:http://blog.sina.com.cn/s/blog_68fe7e15010100an.html 之前因为不知道偶电脑是因为安装了oracle后,才导致的长达两周的开机速度要足足10分钟 ...
- 定时导出Oracle数据表到文本文件的方法
该实例实现了通过windows定时任务来实现了将数据库中指定数据表数据导出为txt文本格式.其思路是通过可执行的bat文件去调用导出数据脚本,然后再在windows定时任务中调用该bat文件来实现.该 ...
- 【Linux基础】VI命令模式下删除拷贝与粘贴
在VI命令模式下:y 表示拷贝, d 表示删除,p标识粘贴 1.删除 dw 表示删除从当前光标到光标所在单词结尾的内容. d0 表示删除从当前光标到光标所在行首的内容. d$ 表示删除从当前光标到光标 ...
随机推荐
- html中怎样获取子元素的索引位置
jQuery 的 index() 方法返回指定元素相对于其他指定元素的索引值, 注意:索引值是从0开始计数的. 获得当前元素的索引值可用click事件触发 1 $(selector).click(fu ...
- Linux内核数据管理利器--红黑树
目录 写在前面 1. 红黑树的原理 2. 红黑树操作 2.1 红黑树的节点插入 2.2 红黑树的节点删除 2.3 红黑树的查询操作 3. 红黑树操作实验 附录A: 实验代码 写在前面 本文通过两个方面 ...
- #分治,决策单调性dp#CF868F Yet Another Minimization Problem
题目 给定一个序列 \(a\),要把它分成 \(k\) 个子段.(\(n\leq 10^5,k\leq 20\)) 每个子段的费用是其中相同元素的对数.求所有子段的费用之和的最小值. 分析 有一个很明 ...
- 深入解析 C 语言中的 for 循环、break 和 continue
C语言中的 for 循环 当您确切地知道要循环执行代码块的次数时,可以使用 for 循环而不是 while 循环 for (语句 1; 语句 2; 语句 3) { // 要执行的代码块 } 语句 ...
- 民生直销银行终端安全修炼秘籍之HMS Core两大安全能力
在金融行业数字化转型浪潮下,传统商业银行先后推出手机银行.直销银行等移动金融客户端.作为民生银行"数字金融"的试验田,民生直销银行始终秉承"简单的银行"发展理念 ...
- WPF开发随笔收录-查看PDF文件
一.前言 在项目的开发过程中,涉及到查看服务器生成的pdf报告文件的查看,起初的方案是通过spire.pdf这个库来将pdf文件转换成图片,然后在进行查看.但是经常被吐槽预览不清晰,后面上网发现了一个 ...
- 这些Git事故灾难, 你经历过几个?
前言 关于Git, 相信大家最常用的就是pull和push. 但随着协作规模的提升, 遇到的问题也会越来越多. 本篇文章并不科普一些命令的详细用法, 更多的是分享在工作中遇到的Git场景问题以及踩过的 ...
- 【Oracle】使用xmlagg(xmlparse(content()).getclobval()拼接信息
使用xmlagg(xmlparse(content()).getclobval()拼接信息 简单来说格式如下 xmlagg(xmlparse(content(内容||分割符)).getclobval( ...
- 力扣596(MySQL)-超过5名学生的课(简单)
题目: 表: Courses 编写一个SQL查询来报告 至少有5个学生 的所有班级. 以 任意顺序 返回结果表. 查询结果格式如下所示 示例1: 解题思路: 使用group by按 班级 进行分组后 ...
- Kruise Rollout:灵活可插拔的渐进式发布框架
简介: Kruise Rollout 是 OpenKruise 社区开源的渐进式交付框架.Kruise Rollout 支持配合流量和实例灰度的金丝雀发布.蓝绿发布.A/B Testing 发布,以及 ...