约束是表级的强制规定
有以下五种约束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
注意:
如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名
创建和修改约束:
建表的同时
建表之后
可以在表级或列级定义约束
可以通过数据字典视图查看约束
表级约束和列级约束
作用范围:
①列级约束只能作用在一个列上
②表级约束可以作用在多个列上(当然表级约束也
可以作用在一个列上)
定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
非空(not null) 约束只能定义在列上
--NOT NULL 约束
create table emp2 (id number(10) constraint emp2_id_nn not null,name varchar2(20) not null,salary number(10,2));
--UNIQUE 约束
create table emp3 (id number(10) constraint emp3_id_uk unique,name varchar2(20) constraint emp3_name_nn not null ,email varchar(20),salary number(10,2),constraint emp3_email_uk unique(email));
--PRIMARY KEY(主键) 约束
列级:
create table emp4 (id number(10) constraint emp4_id_pk primary key,name varchar2(20) constraint emp4_name_nn not null ,email varchar(20),salary number(10,2),constraint emp4_email_uk unique(email));
表级:
create table emp5 (id number(10),name varchar2(20) constraint emp5_name_nn not null ,email varchar(20),salary number(10,2),constraint emp5_email_uk unique(email), constraint emp5_id_pk primary key(id));
--FOREIGN KEY(外键) 约束
FOREIGN KEY: 在表级指定子表中的列
REFERENCES: 标示在父表中的列
ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空): 子表中相应的列置空
表级:
create table emp6 (id number(10),name varchar2(20) constraint emp6_name_nn not null ,email varchar(20),salary number(10,2),department_id number(10),constraint emp6_email_uk unique(email), constraint emp6_id_pk primary key(id),constraint emp6_dept_id_fk foreign key(department_id)references departments(department_id));
create table emp7 (id number(10),name varchar2(20) constraint emp7_name_nn not null ,email varchar(20),salary number(10,2),department_id number(10),constraint emp7_email_uk unique(email), constraint emp7_id_pk primary key(id),constraint emp7_dept_id_fk foreign key(department_id)references departments(department_id)on delete set null);
--CHECK 约束
create table emp8 (id number(10),name varchar2(20) constraint emp8_name_nn not null ,email varchar(20),salary number(10,2) check(salary > 1500 and salary<30000),department_id number(10),constraint emp8_email_uk unique(email), constraint emp8_id_pk primary key(id),constraint emp8_dept_id_fk foreign key(department_id)references departments(department_id)on delete set null);
添加约束:
使用 ALTER TABLE 语句:添加或删除约束,但是不能修改约束
有效化或无效化约束:添加 NOT NULL 约束要使用 MODIFY 语句
--添加约束
alter table emp5 modify(salary number(10) not null);
alter table emp5 add constraint emp5_name_uk unique(name);
--删除约束
alter table emp5 drop constraint emp5_name_nn;
无效化约束:在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。
alter table emp3 disable constraint emp3_email_uk;
激活约束:ENABLE 子句可将当前无效的约束激活
alter table emp3 enable constraint emp3_email_uk;