天天看點

oracle基礎 第四篇 限制

限制的作用

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(條件);
           

注意:在建立表時設定限制時,非空限制隻能在列級設定,不能在表級設定。

參考來自慕課網和尚矽谷