主键和唯一索引的字段可否相同?

junnyfeng 2011-04-06 01:22:36


如题,谢谢
...全文
525 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
shirley251 2011-04-09
  • 打赏
  • 举报
回复
建了主key,系统会默认为一索引,栏位与主key同
ycproc 2011-04-09
  • 打赏
  • 举报
回复
可以相同的
互不影响
li1229363 2011-04-07
  • 打赏
  • 举报
回复
索引可以定义多个的说。主键只能是一个的说。
junnyfeng 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iihero 的回复:]

可以相同。但是基本上没有必要重复啊。你如果定义了主键,就没有必要在其上定义一个唯一性索引了。
[/Quote]

好像不能重复,当先建了唯一索引再加主键(字段相同),会报错的。好像是ORA-02260,table can have only one primary key 我觉得奇怪,唯一索引当成主键?
物润声无 2011-04-07
  • 打赏
  • 举报
回复
oracle 不能会报:ORA-01408


SQL> create table t( a int primary key);

Table created

SQL> create unique index on t(a);

create unique index on t(a)

ORA-00953: 索引名缺失或无效

SQL> create unique index b on t(a);

create unique index b on t(a)

ORA-01408: 此列列表已索引
minitoy 2011-04-07
  • 打赏
  • 举报
回复
primary key=unique index +not null
huangdh12 2011-04-07
  • 打赏
  • 举报
回复
这个好像没有必要吧,系统会为主键建立唯一性的索引。
所以这应该是默认的。不用另外建
ojuju10 2011-04-07
  • 打赏
  • 举报
回复
主键就包含了在该主键字段中创建了唯一索引
minitoy 2011-04-07
  • 打赏
  • 举报
回复
测试了下,的确不能重复
SQL> create table emp1
2 as
3 select * from emp;

Table created

SQL> create unique index idx_emp1_1 on emp1(empno);

Index created

SQL> create unique index idx_emp1_2 on emp1(empno);

create unique index idx_emp1_2 on emp1(empno)

ORA-01408: such column list already indexed

SQL>
yejihui9527 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ct2k01 的回复:]

定义了主键就自动产生唯一索引在主键上,为什么还要另建索引?
[/Quote]
+1
doer_ljy 2011-04-06
  • 打赏
  • 举报
回复
可以重复。
每张表主键只能有一个,但是唯一约束可以有多个。
304的的哥 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ct2k01 的回复:]

定义了主键就自动产生唯一索引在主键上,为什么还要另建索引?
[/Quote]
索引有很多种,不光是unique index:http://bbs.misonsoft.com/thread-426-1-1.html
为什么我说,你为一个表创建了一个primary key后oracle就自动为你创建了一个unique index呢?
下面来看一个实例:

SQL> create table t(
2 x number(2),
3 y varchar2(5))
4 /

Table created

SQL> alter table t add constraint pk_t primary key(x);

Table altered

SQL> select constraint_name,table_name,index_name
2 from user_constraints where table_name='T';

CONSTRAINT_NAME TABLE_NAME INDEX_NAME
------------------------------ ------------------------------ ------------------------------
PK_T T PK_T

SQL> select index_name,index_type,table_name,uniqueness
2 from user_indexes where table_name='T';

INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENESS
------------------------------ --------------------------- ------------------------------ ----------
PK_T NORMAL T UNIQUE
---
SQL> desc user_indexes;
Name Type Nullable Default Comments
----------------------- -------------- -------- ------- --------------------------------------------------------------------------------------
INDEX_NAME VARCHAR2(30) Name of the index
INDEX_TYPE VARCHAR2(27) Y
TABLE_OWNER VARCHAR2(30) Owner of the indexed object
TABLE_NAME VARCHAR2(30) Name of the indexed object
TABLE_TYPE VARCHAR2(11) Y Type of the indexed object
UNIQUENESS VARCHAR2(9) Y Uniqueness status of the index: "UNIQUE", "NONUNIQUE", or "BITMAP"
...

这下明白了吧!
Rotel-刘志东 2011-04-06
  • 打赏
  • 举报
回复
可以重复的,但建立主键是否建立唯一索引,没有必要了。
碧水幽幽泉 2011-04-06
  • 打赏
  • 举报
回复
重复创建了,并且占磁盘空间。
ct2k01 2011-04-06
  • 打赏
  • 举报
回复
定义了主键就自动产生唯一索引在主键上,为什么还要另建索引?
304的的哥 2011-04-06
  • 打赏
  • 举报
回复
当你建立一个primary key时,oracle就为你建立了一个unique index
因为主键是不允许有重复值的
iihero_ 2011-04-06
  • 打赏
  • 举报
回复
可以相同。但是基本上没有必要重复啊。你如果定义了主键,就没有必要在其上定义一个唯一性索引了。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧