天天看點

主鍵、外鍵、空值、唯一性限制

一:主鍵

1.文法

格式一:create table column primary key; ------ (列一級限制)

格式二:create table column , constraint primary key; -----(表一級限制)

2.練習

例:在empxx資料表中定義empno為主鍵限制

create table empxx (epmno number(4) primary key);

例:在empxx資料表中定義empno為主鍵限制

drop table empxx;

create table empxx(empno number(4),constraint empxx_empno_pk primary key(empno));

create table deptxx (deptno number(4) primary key);

create table deptxx(deptno number(4),constraint deptxx_empno_pk primary key(deptno));

測試deptxx資料表是否可以插入空值或者重複值

測試1:插入重複值

第一次插入:insert into deptxx values(10);

結果:成功

第二次插入:insert into deptxx values(10);

結果:ORA-00001: 違反唯一限制條件 (SCOTT.SYS_C006998)

測試二:插入空值

insert into deptxx values();

結果:ORA-00936: 缺失表達式

二:空值限制

1.文法:

格式一:create table column not null; ----(列一級限制)

2.練習

例:在empxx資料表中定義empno為主鍵限制, ename添加not null

嘗試不加非空資料表的建立

create table empxx(empno number(4), ename varchar(20), constraint empxx_empno_pk primary key(empno));

插入測試資料,檢視空值是否可以添加到empxx資料表的ename列

insert into empxx values(1000,null);

結果:成功插入

删除empxx

drop table empxx;

嘗試添加非空限制給ename列

create table empxx(empno number(6), ename varchar(20) not null,

constraint empxx_empno_pk primary key(empno));

插入測試資料,檢視空值是否可以添加到empxx資料表的ename列

insert into empxx values(1000,null);

結果:失敗 ORA-01400: 無法将 NULL 插入 (“SCOTT”.“EMPXX”.“ENAME”)

三:唯一性限制

1.文法

格式一:create column unique; -------(列一級限制)

格式二:create table colum, constraint unique; ---------(表一級限制)

2.練習

例:嘗試不加唯一性限制資料表的建立

drop table empxx;

create table empxx(empno number(4),sal number(8),

constraint empxx_empno_pk primary key(empno));

插入測試資料,檢視是否可以添加重複值到empxx資料表的sal列

insert into empxx values(1000,2800);

insert into empxx values(1000,2800);

結果:ORA-00001: 違反唯一限制條件 (SCOTT.EMPXX_EMPNO_PK)

删除empxx

drop table empxx;

嘗試添加唯一限制給sal列

create table empxx(empno number(6), sal number(8) unique,

constraint empxx_empno_pk primary key(empno));

插入測試資料,檢視時候否可以添加重複值到empxx資料表的sal列

insert into empxx values(1000,2800);

insert into empxx values(1000,2800);

結果:ORA-00001: 違反唯一限制條件 (SCOTT.EMPXX_EMPNO_PK)

删除empxx

drop table empxx;

使用第二種第一個定義格式完成xmpxx資料表,sal列非空限制的定義

create table empxx(empno number(4), sal number(8),

constraint empxx_empno_pk primary key(empno),

constraint empxx_sal_uq unique(sal));

插入測試資料,檢視是否可以添加重複值到empxx資料表的sal列

insert into empxx values(1000,2800);

insert into empxx values(1000,2800);

四:外鍵限制

1.概念

通過一個列标題建立關聯的兩張資料表,如果列标題是其中一張表的主鍵,那麼這個列标題就是另一張資料表的外鍵

2.文法

格式一:create table column foreign key ------(列一級限制)

格式二:create table column , constraint foreign key -------(表一級限制)

(兩張表如何建立關聯:兩張表中有相同的标題)

3.練習

假設deptxx資料表(deptno number(2) ,dname varchar(20))、

empxx資料表(empno number(4), ename varchar(30), deptno number(2)),建立兩者之間的關聯

第一步:建立deptxx資料表

create table deptxx(

deptno number(2) ,dname varchar(20),

constraint deptxx_deptno_pk primary key(deptno));

第二步:建立empxx資料表

create table empxx(

empno number(4), ename varchar(30), deptno number(2),

constraint empxx_empno_pk primary key(empno),

constraint empxx_deptno_fk foreign key(deptno) references deptxx(deptno));

4.外鍵限制特點

(1)插入、修改

主表限制子表(主表裡沒有的資料,我們是不能讓他出現在子表中)

(2)删除

子表限制主表(隻要是子表裡面有資料,就不可以删除主表的記錄)

例:在empxx資料表中插入資料

insert into empxx values(1000,‘ABC’,20);

錯誤:ORA-02291: 違反完整限制條件 (SCOTT.EMPXX_DEPTNO_FK) - 未找到父項關鍵字

我們應該先在peotxx資料表中添加20,information資料

insert into deptxx values(20,‘INFORMATION’);

再在empxx資料表中插入資料

insert into empxx values(1000,‘ABC’,20);

5.擴充選項 on delete cascade(級聯删除)

功能:當我們想在删除主表記錄的同時,一并删除子表中的記錄,我們可以使用on delete cascade

例:建立外鍵限制并添加級聯删除功能

第一步:

drop table empxx;

drop table deptxx;

第二步:建立兩張帶限制的資料表

(1)create table deptxx(

deptno number(2) ,dname varchar(20),

constraint deptxx_deptno_pk primary key(deptno));

(2)create table empxx(

empno number(4), ename varchar(30), deptno number(2),

constraint empxx_empno_pk primary key(empno),

constraint empxx_deptno_fk foreign key(deptno) references deptxx(deptno) on delete cascade);

插入測試資料

我們應該下奶deptxx資料表中添加20 , INFORMATION

insert into deptxx values(20,‘INFORMATION’);

再在empxx資料表中插入記錄

insert into empxx values(1000,‘ABC’,20);

接下來嘗試删除主表中的20部門的資訊

delete deptxx where deptno=20;

五:檢查限制(check)

功能:限定插入記錄的取值範圍(如性别隻能選男或女)