Oracle主鍵

zhenghaishu發表於2014-10-10

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29485627/viewspace-1293792/,如需轉載,請註明出處,否則將追究法律責任。

相關文章