sql完整性约束有:非空约束,唯一约束,主键约束,外键约束,条件约束等
完整性约束是保证用户所做的修改不会破坏数据的一致性,是保护数据正确性和相容性的一种手段。
常见的5种约束:
NOT NULL:非空约束C,指定的列不允许为空值
UNIQUE:唯一约束U,指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的
PRIMARY KEY:主键约束P,唯一的标识出表的每一行,且不允许空值,一个表只能有一个主键约束
FOREIGN KEY:外键约束R,一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列
CHECK:条件约束C,指定该列是否满足某个条件
非空约束 NK
create table member( mid number, name varchar2(200) not null );
插入空报错:
SQL> insert into member(mid,name) values(1,null);*第 1 行出现错误:ORA-01400: 无法将 NULL 插入 ("SCO<div>本文来源gaodai.ma#com搞#代!码网_</div>TT"."MEMBER"."NAME")
唯一约束 UK
drop table member purge;create table member( mid number, name varchar2(200) not null, email varchar2(50) unique );
插入报错
SQL> insert into member(mid,name,email) values (1,'scott','[email protected]');
已创建 1 行。
SQL> insert into member(mid,name,email) values (2,'jack','[email protected]');insert into member(mid,name,email) values (2,'jack','[email protected]')*第 1 行出现错误:ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C0010891)
给约束指定名字
这错误并没有像之前的非空约束那样,准确告诉用户哪个字段出现了问题,我们可以给这个约束指定一个名字
create table member( mid number, name varchar2(200) not null, email varchar2(50), constraint uk_email unique(email) );
主键约束 PK
主键约束=非空约束+唯一约束
create table member( mid number, name varchar2(200) not null, email varchar2(50), constraint pk_number primary key(mid), constraint uk_email unique(email) );
插入错误的数据报错:
SQL> insert into member(mid,name,email) values (1,'jack','[email protected]');
已创建 1 行
SQL> insert into member(mid,name,email) values (1,'jack','[email protected]');insert into member(mid,name,email) values (1,'jack','[email protected]')*第 1 行出现错误:ORA-00001: 违反唯一约束条件 (SCOTT.PK_NUMBER)
检查约束 CK
create table member( mid number, name varchar2(200) not null, age number check(age between 0 and 200), sex varchar2(10), email varchar2(50), constraint pk_number primary key(mid), constraint uk_email unique(email), constraint ck_sex check(sex in('男','女')) );
插入错误数据报错:
SQL> insert into member(mid,name,age,sex,email) values (1,'Jack','300','无','[email protected]');insert into member(mid,name,age,sex,email) values (1,'Jack','300','无','[email protected]')*第 1 行出现错误:ORA-02290: 违反检查约束条件 (SCOTT.CK_SEX)
主外键约束 FK
create table member( mid number, name varchar2(200) not null, constraint pk_mid primary key(mid) ); create table advice( adid number, content clob not null, mid number, constraint pk_adid primary key(adid), constraint fk_mid foreign key(mid) references member(mid) );