/**PageBeginHtml Block Begin **/ /***自定义返回顶部小火箭***/ /*生成博客目录的JS 开始*/ /*生成博客目录的JS 结束*/

oracle查询某张表的外键,并用 truncate 命令有外键的表中的数据

* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* @author Alan
* @Email no008@foxmail.com

 

正文

注:本文来源于《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;


具体实例操作:

posted @   一品堂.技术学习笔记  阅读(1032)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 手把手教你更优雅的享受 DeepSeek
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现
点击右上角即可分享
微信分享提示

目录导航