Oracle筆記——表數據完整性和約束性

Oracle筆記——表數據完整性和約束性

實體完整性(主鍵約束)

在建立表時建立主鍵約束

create table Books_1
(
	BookNo number(4),
	BookName varchar2(20),
	Author varchar2(10),
	ISBN varchar2(20)
	constraint BOOK_PK primary key(BookNo)		// constraint 約束名 primary key(字段名1,字段名2,...)
);

用修改的方式建立主鍵約束

alter table [表名] add constraint [約束名] primary key(字段名1,字段名2,...);

上面由於定義了約束名,所以無法省略constraint,若想要系統爲它自動分配約束名稱,則能夠省略constraintoracle

create table Books_1
(
	BookNo number(4),
	BookName varchar2(20),
	Author varchar2(10),
	ISBN varchar2(20)
	primary key(BookNo)		// primary key(字段名1,字段名2,...)
);
alter table [表名] add primary key(字段名1,字段名2,...);

注意:code

若是表中已存在數據,而且主鍵列具備相同的值或存在NULL值,則添加主鍵約束的操做失敗。io

參照完整性(外鍵約束)

在建立表時建立外鍵約束

create table Books_1
(
	BookNo number(4),
	BookName varchar2(20),
	Author varchar2(10),
	ISBN varchar2(20)
	
	constraint BOOK_FK
	foreign key(BookName)		
	references books(BookName)		// 若原來的表和映射的表的列名重名則能夠省略列名
);

用修改的方式建立主鍵約束

alter table [表名] add constraint [約束名] foreign key(字段名) references [表名](字段名)

設置外鍵約束行爲

約束行爲有三個:No ActionSet NullCascadetable

No Action:當刪除被引用的表被引用的列的數據時,將違反外鍵約束,該操做將被禁止。(默認)date

Set Null:當刪除被引用的表被引用的列的數據時,外鍵表中對應外鍵列值將被設置成Null。(前提是該列支持null)引用

Cascade:「級聯刪除」,當刪除被引用的表被引用的列的數據時,外鍵表中對應數值也會被刪除。方法

alter table [表名] add constraint [約束名] foreign key(字段名) references [表名](字段名) on[delete|update...] [約束行爲]

用戶自定義完整性(惟一鍵約束、check約束、默認值約束、not null約束等)

惟一性約束

定義惟一性約束,則該列不能有相同的值,能夠爲null(除非列自己就設置爲not null),關鍵字爲unique,設置方法和Primary key同樣im

alter table [表名] add constraint [約束名] unique key(字段名1,字段名2,...);

check約束

create table Books_1
(
	BookNo number(4),
	BookName varchar2(20),
	Author varchar2(10),
	ISBN varchar2(20),
	constraint ISBN_CK check(ISBN like 'ISBN%'),	// 數據不符合'ISBN%'都會報錯
	constraint BOOK_PK primary key(BookNo)		
);

默認值約束

create table Books_1
(
	BookNo number(4),
	BookName varchar2(20) default '書名',				// 默認值
	Author varchar2(10),
	ISBN varchar2(20),
	constraint ISBN_CK check(ISBN like 'ISBN%'),	
	constraint BOOK_PK primary key(BookNo)		
);

not null 約束

create table Books_1
(
	BookNo number(4) not null,						// null 不被容許在這一列出現
	BookName varchar2(20) default '書名',
	Author varchar2(10),
	ISBN varchar2(20),
	constraint ISBN_CK check(ISBN like 'ISBN%'),	
	constraint BOOK_PK primary key(BookNo)		
);

刪除約束

drop constraint [約束名]

禁用和啓用約束

在建立時禁用約束

create table Books_1
(
	BookNo number(4) not null,						
	BookName varchar2(20) default '書名',
	Author varchar2(10),
	ISBN varchar2(20),
	constraint ISBN_CK check(ISBN like 'ISBN%') disable,		// 禁用約束
	constraint BOOK_PK primary key(BookNo)		
);

禁用已存在的約束

alter table [表名] disable constraint [約束名];

啓動約束

alter table [表名] enable [NOvalidate|validate] constraint [約束名];
[validate|NOvalidate]:表示在激活約束時驗不驗證表中的數據是否知足約束,默認validate。
相關文章
相關標籤/搜索