Oracle主键

Oracle主键

 

1 创建不指定主键名的主键

create table emp

(

 id number(6),

 first_name varchar2(20)

);

表已创建

 

SQL> alter table emp add primary key (id);

表已更改。

 

查看主键信息

SQL> select table_name, constraint_name, constraint_type, status from user_constraints where table_name = 'EMP';

TABLE_NAME     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS

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

EMP            SYS_C0010818                   P               ENABLED

 

查看主键所在的列

SQL> select table_name, constraint_name, column_name from user_cons_columns where constraint_name = 'SYS_C0010818';

TABLE_NAME     CONSTRAINT_NAME                COLUMN_NAME

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

EMP            SYS_C0010818                   ID

 

2 删除主键

SQL> alter table emp drop primary key;

表已更改

 

查看主键信息

SQL> select table_name, constraint_name, constraint_type, status from user_constraints where table_name = 'EMP';

(结果为空)

 

3 创建命名主键

SQL> alter table emp add constraint pk_emp primary key (id);

表已更改。

 

查看主键信息

SQL> select table_name, constraint_name, constraint_type, status from user_constraints where table_name = 'EMP';

TABLE_NAME     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS

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

EMP            PK_EMP                         P               ENABLED

 

4 重命名主键

SQL> alter table emp rename constraint PK_EMP to PK_EMP_NEW;

表已更改。

 

查看主键信息

SQL> select table_name, constraint_name, constraint_type, status from user_constraints where table_name = 'EMP';

TABLE_NAME     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS

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

EMP            PK_EMP_NEW                     P               ENABLED

 

5 主键与索引

1)若主键列原先没有索引,则创建主键时会自动创建一个索引,索引的名称与刚创建时的主键名称一样。且索引名称不会随着主键名称被重命名而改变。删除主键会导致索引被一并删除。

 

SQL> select table_name, index_name, index_type from user_indexes where table_name='EMP';

TABLE_NAME     INDEX_NAME                     INDEX_TYPE

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

EMP            PK_EMP                         NORMAL

 

SQL> alter table emp drop primary key;

表已更改。

 

SQL> select table_name, index_name, index_type from user_indexes where table_name='EMP';

(结果为空)

 

2)若在某列创建主键之前该列已经创建过索引,则创建主键时不会再次创建索引,且主键与索引之间没有连带关系。删除主键不会同时删除索引。

 

SQL> create index ind_emp on emp(id);

索引已创建。

 

SQL> select table_name, index_name, index_type from user_indexes where table_name='EMP';

TABLE_NAME     INDEX_NAME                     INDEX_TYPE

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

EMP            IND_EMP                        NORMAL

 

SQL> alter table emp add primary key(id);

表已更改。

 

SQL> select table_name, constraint_name, constraint_type, status from user_constraints where table_name = 'EMP';

TABLE_NAME     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS

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

EMP            SYS_C0010820                   P               ENABLED

 

SQL> alter table emp drop primary key;

表已更改。

 

SQL> select table_name, index_name, index_type from user_indexes where table_name='EMP';

TABLE_NAME     INDEX_NAME                     INDEX_TYPE

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

EMP            IND_EMP                        NORMAL

请使用浏览器的分享功能分享到微信等