暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 具有非唯一索引的主键

askTom 2018-01-23
234

问题描述

嗨,团队,

我只是在玩一些东西,所以想和你分享。

我对主键的理解是,Oracle使用唯一索引来强制对表列的主键约束是唯一的。

下面是我尝试的代码,其中我在主键列上创建了非唯一索引,并试图插入重复的数据,但它仍然给出错误。

所以我的问题是Oracle如何强制执行主键约束。

SQL> CREATE TABLE TAB_TEST ( ID NUMBER, NAME VARCHAR2(10) );

Table created.

SQL> ALTER TABLE TAB_TEST ADD CONSTRAINT ID_PK PRIMARY KEY (ID) USING INDEX ( CREATE INDEX ID_0P ON TAB_TEST(ID ASC) );

Table altered.

SQL> COL INDEX_NAME FOR A10
SQL> COL INDEX_TYPE FOR A10
SQL> COL TABLE_NAME FOR A10
SQL> COL UNIQUENESS FOR A15
SQL> COL STATUS FOR A10
SQL> SELECT INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS, STATUS FROM DBA_INDEXES WHERE TABLE_NAME = 'TAB_TEST';

INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENESS      STATUS
---------- ---------- ---------- --------------- ----------
ID_0P      NORMAL     TAB_TEST   NONUNIQUE       VALID

SQL> INSERT INTO TAB_TEST VALUES ( 1, 'J1' );

1 row created.

SQL> INSERT INTO TAB_TEST VALUES ( 2, 'J2' );

1 row created.

SQL> INSERT INTO TAB_TEST VALUES ( 3, 'J3' );

1 row created.

SQL> INSERT INTO TAB_TEST VALUES ( 1, 'J1' );
INSERT INTO TAB_TEST VALUES ( 1, 'J1' )
*
ERROR at line 1:
ORA-00001: unique constraint (FC_DBA1.ID_PK) violated
复制

专家解答

我们可以使用非唯一索引来强制执行唯一约束。

这对于可延迟约束是有用的,即,您可以暂时违反它,但数据必须在提交时有效。

这是一篇关于延迟约束的文章

http://www.oracle.com/technetwork/testcontent/o31asktom-354139.html


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论