注:本文来源于《oracle查询某张表的外键(最终解决办法)

一:几个查询表外键的脚本

select b.table_name, b.column_name from user_constraints a
inner join user_cons_columns b on a.constraint_name = b.constraint_name
where a.r_constraint_name in
(
select e.constraint_name from user_constraints e where e.table_name = 'GK_ZWVCH'
)

Oracle 查看一个表对应的主键和外键的约束关系,查看的语句:

 select a.owner, --主键拥有者  

        a.table_name, --主键表  

        b.column_name, --主键列  

        c.OWNER, --外键拥有者  

        c.table_name, --外键表  

        d.column_name --外键列  

 from user_constraints  a

 left join user_cons_columns b

             on  a.constraint_name=b.constraint_name

 left join user_constraints c

             on c.R_CONSTRAINT_NAME=a.constraint_name

 left join user_cons_columns d

             on c.constraint_name=d.constraint_name

 where  a.constraint_type='P'

     and  a.table_name='GK_ZWVCH' --需要查看主外键关系的表  

 order by a.table_name

二:truncate  有外键关系的表数据

问题原因

虽然truncate table在删除数据的速度上会占有一定的优势,但并不是在所有的情况我们都可以使用truncate,存在以下情况就使用truncate就会失败。

1,要删除数据的表包含foreign key约束(被其他表引用),而delete则可以通过级联删除来删除相关联的数据。

2,被索引视图引用过的表,也不能使用truncate。

解决方案

有外键的表只能用delete,不能用truncate,这是语法规定,要么就取消外键再truncate。

可以先禁用外键约束,删除完毕后,再启动外键约束。

查找外键关联

SELECT T1.TABLE_NAME,
T2.TABLE_NAME AS "TABLE_NAME(R)",
T1.CONSTRAINT_NAME,
T1.R_CONSTRAINT_NAME AS "CONSTRAINT_NAME(R)",
A1.COLUMN_NAME,
A2.COLUMN_NAME AS "COLUMN_NAME(R)"
FROM USER_CONSTRAINTS T1
INNER JOIN USER_CONSTRAINTS T2 ON T1.R_CONSTRAINT_NAME =
T2.CONSTRAINT_NAME
INNER JOIN USER_CONS_COLUMNS A1 ON T1.CONSTRAINT_NAME =
A1.CONSTRAINT_NAME
INNER JOIN USER_CONS_COLUMNS A2 ON T1.R_CONSTRAINT_NAME =
A2.CONSTRAINT_NAME
WHERE T2.TABLE_NAME = '要删的表名';

外键禁用/开启

--禁用约束:
alter table XXX disable constraint XXX;
--启用约束
alter table XXX enable constraint XXX;

具体实例操作:

oracle查询某张表的外键,并用 truncate 命令有外键的表中的数据的更多相关文章

  1. 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的“删除”超链接

    查看本章节 查看作业目录 需求说明: 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的"删除"超链接,使用 DOM 节点的删除操作将对应的 ...

  2. 使用truncate命令清空当前用户所有表的所有数据

    --批量清空当前用户所有表的所有数据 declarev_sql varchar2(2000) ;CURSOR cur is select table_name from user_tables ord ...

  3. MySQL数据库有外键约束时使用truncate命令的办法

    MySQL数据库操作中,Delete与Truncate两个命令都可以删除一个数据表中的全部数据,使用办法分别是: DELETE FROM t_question TRUNCATE TABLE t_que ...

  4. HBase表的基本结构和常用命令行操作

    一.HBase表的基本结构 1.概述: 平时常见的MySQL.Oracle数据库都是传统型关系数据库,它们都是按行查询.按行存储:而HBase为非关系型数据库,它是按列存储的的. 在HBase插入数据 ...

  5. 详解大数据采集引擎之Sqoop&采集oracle数据库中的数据

    一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop i ...

  6. Mysql命令alter add:增加表的字段

    alter add命令用来增加表的字段. alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4 ...

  7. (笔记)Mysql命令alter add:增加表的字段

    alter add命令用来增加表的字段. alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4 ...

  8. oracle查询所有用户表的表名、主键名称、索引、外键等

    1.查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.ind ...

  9. oracle中查询某张表都被哪些表参照了

    起因: 系统测试的时候发现如果某条记录已经被引用了,这个时候删除这条记录会引起数据不一致,系统会报错.比如警员信息,在考勤记录表里会引用警员ID,如果考勤记录表中已经存在这个警员ID了,这时从警员表中 ...

随机推荐

  1. 新建promise

    callback(){ const promise =new Promise((resolve,rejest)=>{ console.log('2') 代码 resolve('true') }) ...

  2. Glide和Picasso的区别

    首先简单的介绍下两个库的出身: Picasso是Square公司出品的一款非常优秀的开源图片加载库Glide是由Google开发,基于 Picasso,依然有保存了Picasso的简洁风格,但是在此做 ...

  3. python中的__dict__,__getattr__,__setattr__

    python class 通过内置成员dict 存储成员信息(字典) 首先用一个简单的例子看一下dict 的用法 class A(): def __init__(self,a,b): self.a = ...

  4. 洛谷 P1494 [国家集训队] 小Z的袜子

    题目概述: 小Z把N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务 ...

  5. 修改linux下yum镜像源为国内镜像

    修改为163yum源-mirrors.163.com 1.首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo [root@localhost ~]# m ...

  6. Wireshark显示结果过滤基本语法

    按IP地址过滤:1.仅显示源地址为192.168.1.95的项目: ip.src eq 192.168.1.95 2.仅显示目的地址为192.168.1.95的项目: ip.dst eq 192.16 ...

  7. Ubuntu18安装Pycharm时遇到的几个问题

    今天给电脑安装了Ubuntu18.04,安装了一些基础软件. 这里是Ubuntu安装Pycharm的一些问题: 1.安装Pycharm. 首先需要到Pycharm官网进行下载安装包,由于我的是Ubun ...

  8. [Android] Android Build 时报错: java.io.IOException: Could not parse XML from android/accounts/annotations.xml

    Android构建时报错: app:lintVitalRelease[Fatal Error] :3:214: 与元素类型 “item” 相关联的 “name” 属性值不能包含 ‘<’ 字符. ...

  9. iOS应用架构开篇

      iOS应用架构谈开篇  iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用架构谈 动态部署方案 iOS应用架构谈 本地持久化方案 缘由 之前安居客iOS a ...

  10. java 导出

    按钮 <a href="###" class="eui-btn eui-btn-small" onclick="Export()"&g ...