主鍵 外來鍵 空值 唯一性約束

2021-09-12 23:39:35 字數 4967 閱讀 7915

一:主鍵

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)

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

Oracle 查詢表的主鍵,外來鍵,唯一性約束,索引

1 查詢表的所有索引 包括索引名,型別,構成列 select t.i.index type from user ind columns t,user indexes i where t.index name i.index name and t.table name i.table name and...

已經建好的表新增唯一性約束 主鍵 外來鍵約束

unqiue約束用於強制非主鍵列的唯一性,允許存在空值 空值可以不唯一存在,空值永遠不相等 alter table 表明 add constraint 約束名 unique 欄位名 約束名隨便寫。去除唯一性約束 alter table 表名 drop constraint 唯一性約束名 cascad...

主鍵約束和唯一性約束的區別

1.主鍵約束 primary key 1 主鍵用於唯一地標識表中的每一條記錄,可以定義一列或多列為主鍵。2 是不可能 或很難 更新 3 主鍵列上沒有任何兩行具有相同值 即重複值 不允許空 null 4 主健可作外健,唯一索引不可 2.唯一性約束 unique 1 唯一性約束用來限制不受主鍵約束的列上...