限制的作用
1、定義規則。
2、確定完整性。
注意事項:
如果不指定限制名 ,Oracle server 自動按照 SYS_Cn 的格式指定限制名 建立和修改限制: 建表的同時 建表之後 可以在表級或列級定義限制 可以通過資料字典視圖檢視限制。
作用範圍: ①列級限制隻能作用在一個列上 ②表級限制可以作用在多個列上(當然表級限制也 可以作用在一個列上)
定義方式: 列限制必須跟在列的定義後面,表限制不與列一起,而是單獨定義。
表級限制:
A、定義列級限制:
create table 表名 (字段名 字段資料類型 constraint 自己定義的限制名 限制類型......);
B、定義列級限制:
定義在表機構寫完以後定義的限制。
create table 表名 (。。。。。。。constraint 自己定義的限制名 限制類型(字段名1、字段名2.。。));
C、查找限制名:
select constarint_name from user_constarint where table_name='表名';
D、更改限制名:
alter table 表名 rename constraint 舊的限制名 to 新的限制名;
E、禁用限制:
alter table 表名 disable constraint 限制名;
F、禁用限制:
alter table 表名 ensable constraint 限制名;
G、查找限制狀态:
select constraint_name,status from user_constraint where table_name='表名';
H、删除限制:
alter table 表名 drop constraint 限制名;
alter table 表名 drop 限制類型;(例如表中的主鍵,就可以直接删除)
I、查找限制名、類型、限制條件:
select constraint_name , constraint_type, search_condition from user_conditions
where table_name='要查找的表名';
1、非空(not null) 限制:
非空(not null) 限制隻能定義在列上。
在建立表時設定非空限制:
create table 表名 (字段名 字段資料類型 not null......);
例子:
CREATE TABLE USERINFO_t (
ID NUMBER (8,0) NOT NULL,
NAME NVARCHAR2 (8) NOT NULL
);
注意:在建立表時加非空限制,最好添加預設值(用default關鍵字添加),因為添加預設值,插入資料可能會報不能插入空值的錯誤。
在修改表時設定非空限制:
alter table 表名 motify 字段名 資料類型 not null;
例子:
ALTER TABLE USERINFO_T MODIFY NAME NVARCHAR2 (8) NOT NULL;
在修改時删除非空限制:
alter table 表名 modify 字段名 字段資料類型 null;
2、主鍵限制(primary key):
在建立表時設定主鍵限制:
create table 表名(字段名 資料類型 primary key..... );
在修改表時設定主鍵限制:
alter table 表名 add constraint 限制名 primary key(字段名。。。。。。);
3、外鍵限制(foreign key):
FOREIGN KEY: 在表級指定子(從)表中的列 。
REFERENCES: 标示在父(主)表中的列。
在建立表時設定外鍵限制:
create table 從表名 (從表字段1 字段1資料類型 從表字段1限制,......,constraint 限制名 foreign key(從表的字段名)
references 主表名(主表的主鍵) );
create table 從表名 (從表字段1 字段1資料類型 從表字段1限制,......,從表字段n 從表字段n資料類型
references 主表名(主表的主鍵) );
例如:
CREATE userinfo_t (
ID VARCHAR2 (8, 0) PRIMARY KEY,
NAME NVARCHAR2 (8) NOT NULL,
dept_userid NVARCHAR2(8) ,
constraint userinfo_t_dept_id foreign key(dept_userid) references deptinfo(dept_id)
);
注意:1.設定外鍵限制時,主表的字段必須是主鍵。
2.主從表相應的字段必須是同一個資料類型。
3.從表中外鍵限制的字段的值必須來自主表的相應字段的值,或者為null值。
ON DELETE CASCADE(級聯删除): 當父(主)表中的列被删除時,子(從)表中相對應的列也被删除 。
ON DELETE SET NULL(級聯置空): 子(從)表中相應的列置空。
這兩種設定在建表的時候設定,例如:
CREATE userinfo_t (
ID VARCHAR2 (8, 0) PRIMARY KEY,
NAME NVARCHAR2 (8) NOT NULL,
dept_userid NVARCHAR2(8) ,
constraint userinfo_t_dept_id foreign key(dept_userid) references deptinfo(dept_id)
on DELETE cascade
);
在修改表時設定外鍵限制:
alter table 表名 add constraint 限制名 foreign key(從表的字段名)
references 主表名(主表的主鍵);
添加級聯删除的:
add table 表名 constraint 限制名 foreign key(從表的字段名)
references 主表名(主表的主鍵) on DELETE cascade;
4、唯一限制(unique):
在建立表時設定唯一限制:
create table 表名 (字段名 字段資料類型 unique,......);列級定義
create table 表名 (字段名 字段資料類型 ,...... , constraint 限制名 unique(字段名));表級定義
例如:
create table user_info (id number(8,0) primary key,name nvarchar2(20) not null, ide_id number(8,0) unique );
在修改表時添加唯一限制:
alter table 表名 add constraint 限制名 unique(字段名);
例如:
alter table user_info add constraint un_name_new unique(name);
5、檢查限制(cheak), 滿足每一行必須滿足的條件 :
在建立表時設定檢查限制:
create table 表名 (字段名 字段資料類型 check(條件),......);列級定義
create table 表名 (字段名 字段資料類型 ,...... , constraint 限制名 check(條件));表級定義
例如:
create table user_info (id number(8,0) primary key,name nvarchar2(20) not null, salary
number(7,0) check(salary>0) );
在修改表時添加檢查限制:
alter table 表名 add constraint 限制名 check(條件);
注意:在建立表時設定限制時,非空限制隻能在列級設定,不能在表級設定。
參考來自慕課網和尚矽谷