這個字段的值必須知足非空且該字段的值不能重複sql
一張表中只能有一個主鍵spa
這個字段的值不能重複3d
一張表中的惟一性約束個數不受限制blog
不能檢查NULL值table
這個字段的值不能是NULL值class
一張表中的非空約束個數不受限test
字段的值必須符合檢查條件(條件由本身指定,where裏寫的這裏均可以寫)引用
創建兩張表的關聯關係im
foreign key(外鍵) 指定字段margin
on delete cascade 級聯刪除
on delete set nill 級聯置空
在創建表時,直接在表的某一列以後加約束限制
在創建(定義)完表的全部列以後,再選擇某些列加約束限制
create table testcolumn_cons(id primary key, name varchar2(30));
insert into testcolumn_cons values(1, 'test1');
出錯:00001,惟一性錯誤
若是不給約束起名字,則系統會自動爲約束創建一個惟一的名字(但該名字比較難以理解)
constraint(關鍵字) 約束名(表名_加約束的字段名_約束類型)
create table testcolumn_cons(id number constraint testcolumn_cons_idpl primary key, name varchar2(30));
這樣出錯時就知道是哪裏出了錯(起名要有規律)
drop table testcolunm_cons;
create table testcolumn_cons( id number constraint testcolumn_cons_id_pk primary key, fname varchar2(30) constraint testcolumn_cons_fname_nn not null, sname varchar2(30) constraint testcolumn_cons_sname_un unique );
查看:
desc table testcolumn_cons;
增長檢查約束:salary number 檢查條件:要求工資大於3500。
create table testcolumn_cons(id number constraint testcolumn_cons_id_pk primary key, fname varchar2(30) constraint testcolumn_cons_fname_nn not null, sname varchar2(30) constraint testcolumn_cons_sname_un unique, salary number constraint testcolumn_cons_salary_ck check(salary>3500)
);
檢測一下:
insert into testcolumn_cons values(1, 'a', 'b', 3499);
create table testtable_cons( id number, fname varchar2(30), sname varchar2(30), salary number, constraint testtable_cons_id_pk primary key(id), constraint testtable_cons_sname_un unique(sname), constraint testtable_cons_salary_ck check(salary>3500), );
not null 沒有表級約束
在表級約束時,指定約束的字段時,能夠約束多個字段
沒有「聯合非空」的說法,因此非空沒有表級約束
把id和fname聯合起來非空且惟一
這樣是隻有一個主鍵的!id+fname是主鍵
id fname
1 a
1 b
1 NULL
均可以,id重複了也不要緊,由於主鍵是聯合的;
fname是NULL也不要緊,聯合的不爲空就行。
create table testtable_cons( id number, fname varchar2(30), sname varchar2(30), salary number, constraint testtable_cons_id_pk primary key(id), constraint testtable_cons_sname_un unique(sname), constraint testtable_cons_salary_ck check(salary>3500), );
實際應用中混着用
惟一性(unique)只能區分非空值,不能夠區分空值(NULL)
兩個或多個NULL沒法區分惟一性,實際中能夠再設一個非空就能夠了