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

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

注:本文来源于《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 @ 2019-01-23 16:13  一品堂.技术学习笔记  阅读(1023)  评论(0编辑  收藏  举报