--not null只能作用于列级; --unique可作用于列级和表级; --primary key 可作用于列级和表级,相当于同时声明了not null 和unique; --foreign key 可作用于列级和表级,一般作用于表级 --check() 可作用于列级和表级 --创建表的时候创建约束,两种不同的形式(自定义名和系统默认) /*create table emp2( id number(10) constraint emp2_id_nn not null, name varchar2(20) not null, salary number(10,2) )*/ --同时为一列创建非空约束和唯一约束 /*create table emp4( --列级约束 id number(10) constraint emp4_id_nn not null , name varchar2(20) constraint emp4_name_nn not null, email varchar2(20), salary number(10,2), --表级约束 constraint emp4_id_uk unique(id), constraint emp4_email_uk unique(email) )*/ --constraint primary key /*create table emp4( --定义在列级 id number(10) constraint emp4_id_pk primary key, name varchar2(20) not null, salary number(10,2), email varchar2(20), constraint emp4_email_uk unique(email) --定义在表级 --constraint emp4_id_pk primary key(id) )*/ --定义外键约束 /*create table emp5( id number(10) constraint emp5_id_pk primary key, name varchar2(20) not null, salary number(10,2), email varchar2(20), department_id number(20), constraint emp5_email_uk unique(email), --定义在表级 constraint emp5_dept_id_fk foreign key(department_id) references departments(department_id) on delete set null )/*departments 为父表,emp5为子表*/ /*on delete cascade 级联删除,当父表中的列被删除时,子表中相对应的列也被删除*/ /*on delete set null 级联置空 ,。。。子表中相应的列置空*/ -- check约束 create table emp7( id number(10) constraint emp7_id_pk primary key, name varchar2(20) constraint emp7_name_nn not null, salary number(10,2) constraint emp7_salary_ck check(salary>1500), email varchar2(20), constraint emp7_email_uk unique(email), --定义在表级,不用再在后面额外追加列名,已经写在了check(里面) --constraint emp7_salary_ck check(salary>1500) ) --添加修改删除约束 alter table emp5 --add add constraint emp5_name_uk unique --modify modify (salary number(10,2) not null) --drop drop constraint SYS_C005484 --disable disable constraint emp5_name_uk --enable enable constraint emp5_name_uk --查询约束 select constraint_name,constraint_type,search_condition,column_name from user_constraints where table_name = 'employees'