关于primary key和foreign key的问题处理

今天碰到一个问题,在drop primary key的时候,提示ORA-02273的错误。

SQL> ALTER TABLE AR1_ACCOUNT DROP PRIMARY KEY;

ALTER TABLE AR1_ACCOUNT DROP PRIMARY KEY

*

ERROR at line 1:

ORA-02273: this unique/primary key is referenced by some foreign keys

通过下面的字典表查找的关联的表

SQL> SELECT con.constraint_name const_name, con.constraint_type const_type,

  2         con.table_name, con.search_condition search_cond,

  3         con.r_constraint_name r_const, col.table_name r_table,

       col.column_name r_column

  FROM user_constraints con, user_cons_columns col

 WHERE col.constraint_name = con.r_constraint_name  4    5    6  

  7  AND col.table_name='AR1_ACCOUNT';

CONST_NAME                     C TABLE_NAME                     SEARCH_COND          R_CONST                        R_TABLE                        R_COLUMN

------------------------------ - ------------------------------ -------------------- ------------------------------ ------------------------------ --------------------

AR3_GL_UNBILLED_REV_1FK        R AR3_GL_UNBILLED_REV                                 AR1_ACCOUNT_PK                 AR1_ACCOUNT                    ACCOUNT_ID

到此为止,我想为了保险起见,先把表AR3_GL_UNBILLED_REV的foreign key disable以后,再来drop这个表AR1_ACCOUNT   的primary key

使用alter table xxxx disable constraint xxxx;

执行成功了,但是drop primary key的时候还是提示错误 ORA-02273

没办法,看来disable不行,那只能drop了,为了保险起见,先来spool一下创建constraint 的ddl 语句,但是调用时,又出现了问题。

 SQL> SELECT DBMS_METADATA.GET_DDL('CONSTRAINT','AR3_GL_UNBILLED_REV_1FK')FROM DUAL;

ERROR:

ORA-31603: object "AR3_GL_UNBILLED_REV_1FK" of type CONSTRAINT not found in

schema "TEST"

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105

ORA-06512: at "SYS.DBMS_METADATA", line 3149

ORA-06512: at "SYS.DBMS_METADATA", line 4787

ORA-06512: at line 1

查询网上所说,有的人说可能是权限问题,赋予select_catalog_owner权限就好了。但是很奇怪的,怎么试都不行。

最后查了下大家的反馈,确定这是一个bug.这也是dbms_metadata的一个一个限制,在11g版本这个问题依然存在。

最后做了一个表的ddl,这样就包含了foreign key的信息

然后drop了foreign key的constraint之后,drop primary key的操作就可以了继续了。

在脚本最后,需要记得重建那个foreign key.

SQL> ALTER TABLE AR3_GL_UNBILLED_REV ADD CONSTRAINT AR3_GL_UNBILLED_REV_1FK FOREIGN KEY (ACCOUNT_ID) REFERENCES AR1_ACCOUNT(ACCOUNT_ID);

Table altered.

时间: 2024-10-26 09:29:58

关于primary key和foreign key的问题处理的相关文章

SQL Server: Get table primary key and Foreign Key using sql query

---所有用户表(主键,外键,描述等信息)涂聚文 20150924 Geovin Du SELECT tbl.[name] AS [TableName], clmns.[name] AS [ColumnName], usrt.[name] AS [DataType], ISNULL(baset.[name], N'') AS [SystemType], CAST(CASE WHEN baset.[name] IN (N'char', N'varchar', N'binary', N'varbin

数据库中的参照完整性(Foreign Key)

之前在项目中遇到了这样一个问题,我举得简单的例子来说明, 比如我们有两个表,一个表(department)存放的是部门的信息,例如部门id,部门名称等:另一个表是员工表(staff),员工表里面肯定要存放每个员工所在的部门.那问题来了,如果我们这个时候删除了部门表中的某条记录,在staff表中会发生什么? 为了解答上面的问题,让我们先来回顾一下什么是参照完整性. 我们常常希望保证在一个关系中给定属性集上的取值也在另一个关系的特定属性集的取值中出现.这种情况称为参照完整性(referential

mysql-数据库foreign key error 1215

问题描述 数据库foreign key error 1215 create table department(dept_name varchar(20) not null primary key building varchar(20)budget numeric(122)); create table instructor( ID varchar(5) name varchar(20) dept_name varchar(20) salary numeric(121));create tabl

SQL FOREIGN KEY 外键实例教程

SQL FOREIGN KEY 外键实例教程 外国的SQL关键的制约因素 外键在一个表点,主键在另一就座. 让我们说明了外国钥匙与一个例子.看看以下两个表格: 在"人"表:  LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger order 表. O_Id OrderN

InnoDB foreign key 实现

本文是对Innodb外键实现代码路径的简单记录,对外键实现逻辑熟悉的同学直接忽略吧..... 前言 外键代表两张表之间的引用约束关系:在子表上出现的列记录,必须在父表上已经存在.通过外键,我们可以确保业务上的逻辑一致性,同时还能实现一些级联操作:MySQL目前只有InnoDB引擎支持外键,类似MyISAM.Tokudb等引擎都不支持外键. InnoDB支持建立多个列的外键,但被外键约束的父表上必须对这些列建立索引,并且子表上的外键列 和父表上索引上的顺序是一致的.默认情况下,当删除父表中被外键约

MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法_Mysql

前言 这篇文章主要涉及到在数据创建表时,遇到ERROR 1215 (HY000): Cannot add foreign key constraint 问题方面的内容,对于在数据创建表时,遇到同样问题感兴趣的同学可以参考一下. 一.问题的提出 创建两个表:        product:  商品表      sealer:  供货商表 相应的SQL如下: product表: DROP TABLE IF EXISTS `product`; CREATE TABLE `product` ( `id`

mysql中key 、primary key 、unique key 与index区别_Mysql

mysql中索引是非常重要的知识点,相比其他的知识点,索引更难掌握,并且mysql中的索引种类也有很多,比如primary key .unique key 与index等等,本文章向大家介绍mysql中key .primary key .unique key 与index区别.  一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id int(11) NOT NULL auto_increment, user_name varch

【Foreign Key】Oracle外键约束三种删除行为

Oracle使用外键来限制子表中参考的字段值,要求子表中的数据必须在主表中存在.当主表的记录发生变化时导致外键参考唯一约束值发生了变化时,Oracle指定了三种动作:默认值(类似于restrict).delete cascade和delete set null.实际体验一下他们对删除操作的不同效果. 1.创建主表及子表并简单初始化几条数据1)创建主表t_parent,并初始化三条记录sec@ora10g> create table t_parent (parent_id int primary

InnoDB 中foreign key使用注意事项

Innodb foreign key 和 sql  standards的区别: 在 sel statement 中的inserts,deletes,updates 很多行的时候,fk 会一行一行检查. innodb 是设置 shared row_level locks 在父表或者子表上,MySQL CHECK 会立即检查是否有符合的行, 并不会推迟到事务提交的时候, 在innodb上建立fk的条件: 1.innodb允许关联到一个index或者一组 columns(第一个column 必须是in