一:主鍵
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)
功能:限定插入記錄的取值範圍(如性别隻能選男或女)