注:本文来源于《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. 【python 字符串】 字符串的相关方法(一)

    将字符串首字母变为大写 ->  capitalize() 方法 # 将字符串的首字母转换为大写 text = 'alet' ret = text.capitalize() print(ret) ...

  2. sqlplus命令行登录oracle数据库的N种方法盘点

    欢迎访问我的个人博客IT废柴,本文永久链接移至:sqlplus命令行登录oracle数据库的N种方法盘点 sqlplus有几种登陆方式Oracle数据库, 比如: 1.以操作系统权限认证的oracle ...

  3. mapper.xml 的配置

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  4. 洛谷P1512伊甸园的日历游戏题解

    题目 因为可能要参加qbxt的数论考试,所以最近要开始猛刷数论题了. 这是第一道,不过看样子并不想数论题啊,只是一个博弈论. 思路 一位著名老师说过,数学就是转化和化简,所以先考虑化简,先考虑化简年份 ...

  5. Heap Partition ZOJ - 3963(贪心)

    ZOJ - 3963 贪心做一下就好了 反正别用memset #include <iostream> #include <cstdio> #include <sstrea ...

  6. 【集训队作业2018】【XSY3372】取石子 DP

    题目大意 有 \(n\) 堆石子,初始时第 \(i\) 堆石子有 \(a_i\) 个. 你每次取石子会取 \(k\) 个.在你取完一堆石子之后才能在下一堆中取石子. 游戏会进行 \(t\) 轮,每轮会 ...

  7. HDU - 3247 Resource Archiver (AC自动机,状压dp)

    \(\quad\)Great! Your new software is almost finished! The only thing left to do is archiving all you ...

  8. Linux-存储管理

    存储基础知识 从工作原理区分: 机械   HDD 固态   SSD SSD的优势: SSD是摒弃传统磁介质,采用电子存储介质进行数据存储和读取的一种技术,突破了传统机械硬盘的性能瓶颈,拥有极高的存储性 ...

  9. NOI2009 管道取珠 神仙DP

    原题链接 原题让求的是\(\sum\limits a_i^2\),这个东西直接求非常难求.我们考虑转化一下问题. 首先把\(a_i^2\)拆成\((1+1+...+1)(1+1+...+1)\),两个 ...

  10. hello1源代码分析

    hello.java: package javaeetutorial.hello1; //这是一个java包 import javax.enterprise.context.RequestScoped ...