oracle的primarykey主鍵約束
primary key約束是指主鍵約束,用於唯一標識一行記錄。在一個表中只能定義一個primary key約束,該約束可以定義在單獨的列上,也可以定義在多個列上(表級約束)。定義了primary key約束的列或組合不能有重復的值,也不能有null值。
添加primary key
在創建表時,為列添加primary key約束,形式如下:
column_name data_type [constraint constraint_name]
primary key
或
create table table_name(
column_name data_type,[...,]
[constraint constraint_name] primary key(column_name)
[,...]
)
也可以為自己常見的表中添加primary key約束,形式如下:
alter table table_name add [constraint constraint_name] primary key(column_name);
刪除primary key
刪除列上的primary key約束,需要使用alter table ... drop 語句,不過形式上只能采取指定的約束名的方式,如下:
alter table table_name drop constraint constraint_name;
如果在添加約束時使用constraint子句為其指定了約束名,那麼這裡就可以直接使用該名稱,而如果沒有使用constraint子句,則約束名由oracle自動創建,此時就可以通過數據字典user_cons_columns和user_constraints來查看約束的名稱。
具體的操作如下:
SQL> create table person(
pid number(4) not null,
pname varchar(20),
psex char(2)
);
表已創建。
SQL> desc person;
名稱 是否為空? 類型
----------------------------------------- -------- ---------------------------
PID NOT NULL NUMBER(4)
PNAME VARCHAR2(20)
PSEX CHAR(2)
SQL> alter table person add constraint person_pk primary key(pid);
表已更改。
SQL> insert into person values(1,'aaa','女');
已創建 1 行。
SQL> insert into person values(1,'aaa','女');
insert into person values(1,'aaa','女') //外鍵不允許有重復值
*
第 1 行出現錯誤:
ORA-00001: 違反唯一約束條件 (SYSTEM.PERSON_PK) //外鍵不允許有重復值
SQL> insert into person values(2,'aaa','女');
已創建 1 行。
SQL> alter table person drop constraint person_pk; //刪除外鍵
表已更改。
SQL> insert into person values(2,'aaa','女'); //刪除後可以添加重復值
已創建 1 行 。
SQL>
一
SQL> create table p2(
2 pid number(4) primary key,
3 pname varchar(20),
4 psex char(2)
5 );
表已創建。
二
SQL> create table p3(
2 pid number(4) not null,
3 pname varchar(20),
4 psex char(2),
5 constraint pk_p3 primary key (pid)
6 );
表已創建。
三
SQL> create table p4(
2 pid number(4) not null,
3 pname varchar(20),
4 psex char(2),
5 constraint pk_p4 primary key (pid,pname)
6 );
表已創建。