创建主键时,所对应的列如果没有索引,数据库默认会自动创建一个索引;如果对于列有索引,那么创建主键不会再创建索引。这里要注意,列值必须满足主键的要求(唯一,非空),简单测试如下: sql create table wxlun_pri(a number); table created. sql alter t
创建主键时,所对应的列如果没有索引,数据库默认会自动创建一个索引;如果对于列有索引,那么创建主键不会再创建索引。这里要注意,列值必须满足主键的要求(唯一,非空),简单测试如下:
sql> create table wxlun_pri(a number);
table created.
sql> alter table wxlun_pri add constraint primary_key_reply primary key (a); ------创建主键约束
table altered.
sql> select index_name from user_indexes where table_name='wxlun_pri'; ------默认生成索引
index_name
------------------------------
primary_key_reply
sql> alter table wxlun_pri drop constraint primary_key_reply;
table altered.
sql> select index_name from user_indexes where table_name='wxlun_pri';
no rows selected
sql> create index idx_wxlun_pri on wxlun_pri(a); ------创建一个一般索引,测试有重复值时添加主键约束
index created.
sql> insert into wxlun_pri values(1);
1 row created.
sql> /
1 row created.
sql> commit;
commit complete.
sql> select * from wxlun_pri;
a
----------
1
1
sql> alter table wxlun_pri add constraint primary_key_reply primary key (a); ------原索引有重复值,添加主键约束失败
alter table wxlun_pri add constraint primary_key_reply primary key (a)
*
error at line 1:
ora-02437: cannot validate (wxlun.primary_key_reply) - primary key violated
删除重复值,添加主键约束
sql> delete from wxlun_pri where rownum
1 row deleted.
sql> commit;
commit complete.
sql> select * from wxlun_pri;
a
----------
1
sql> alter table wxlun_pri add constraint primary_key_reply primary key (a); ------成功
table altered.
sql> select index_name from user_indexes where table_name='wxlun_pri';
index_name
------------------------------
idx_wxlun_pri
sql> drop table wxlun_pri;
table dropped.
sql>