四、约束:对数据库的字段加的限制
(1)主键约束(primary key)
特点:值唯一,且为非空,一个表智能有一个主键列级实现:在创建列时同时创建主键
由系统提供主键名:create table s_emp(id number primary key,name varchar2(20));指定主键名:create table s_emp (id constraint s_emp_id_pk primary key,name varchar2(20));
表级实现:先创建列,然后创建主键
一般形式:create table s_emp(id number,name varchar2(20),constraint s_emp_id_pk primary key(id));联合约束(多个字段共同组成主键):create table s_emp(id number,name varchar2(20),constraint s_emp_id_name_pk primary key(id,name));
(2)唯一性约束(unique)
特点:值唯一列级实现:
由系统提供唯一性约束名:create table s_emp(id number unique,name varchar2(20));指定唯一性约束名:create table s_emp(id number constraint s_emp_id_uq unique,name varchar2(20));
表级实现:
一般形式:create table s_emp(id number,name varchar2(20),constraint s_emp_id_uq unique(id));联合约束形式:create table s_emp(id number,name varchar2(20),constraint s_emp_id_name_uq(id,name));
(3)非空约束(not null)
特点:值非空列级实现:
由系统提供非空约束名(常用形式):create table s_emp(id number not null,name varchar2(20));指定非空约束名(一般情况下不用):create table s_emp(id number constraint s_emp_id_nn not null,name varchar2(20));
表级实现:无表级实现
(4)检查约束(check)
特点:值需要满足某个条件列级实现:
由系统提供检查约束名:create table s_emp(id number check(id>0),name varchar2(20));指定检查约束名:create table s_emp(id number constraint s_emp_ck check(id>0),name varchar2(20));
表级实现:
一般形式:create table s_emp(id number,name varchar2(20), constraint s_emp_id_ck check(id>0));无联合约束形式
(5)外键约束(foreign key references)
特点:一个表的字段值受限制于另一个表的字段值,主表(父表)为字段被引用的表,从表(子表)定义了外键的表建立表的顺序:先建立父表,再建立子表
建立父表(子表关联的父表字段必须有外键约束或者唯一性约束):create table parent(id number primary key,name varchar2(20));
建立子表:
列级实现:create table child(cid number constraint parent_id_child_cid_fk references parent(id),cname varchar2(20));
表级实现:create table child(cid number,cname varchar2(20),constraint parent_id_child_cid_fk foreign foreign key(cid) references parent(id));
插入数据:先插入父表数据,再插入子表数据,或者子表中外键约束的字段为NULL;
删除数据:必须先删除子表数据,后删除父表数据
删除表:必须先删除子表,才能删除父表
级联删除on delete cascade:删除父表数据行时,子表数据对应行自动被删除(或者删除父表时,自动删除子表)
建立父表:create table parent(id number primary key,name varchar2(20));
建立子表:
列级实现设置级联删除:create table child(cid number constraint parent_id_chid_cid_fk references parent(id) on delete cascade,name varchar2(20));
表级实现设置级联删除:create table child(cid number,name varchar2(20),constraint parnet_id_child_cid_fk foreign key cid references parent(id) on delete cascade);
级联置空on delete set null:删除父表数据行时,子表数据自动置NULL(或者删除父表时,自动将子表置NULL)
建立父表:create table parent(id number primary key,name varchar2(20));
建立子表:
列级实现设置级联置空:create table child(cid number constraint parent_id_child_cid_fk references parent(id) on delete set null,name varchar2(20));
表级实现设置级联置空:create table child(cid number,name varchar2(20),constraint parent_id_child_cid_fk foreign key(cid) references parent(id) on delete set null)