您的位置:首页 > 数据库

sql基础--数据完整性与约束

2018-04-01 11:03 344 查看
一、数据完整性:                                (大多是由于设计引起的)
                可靠性+准确性=数据完整性

对于列来说:域的完整性
对于行来说:实体的完整性
对于两个表之间来说:引用完整性
对于某个单元格来说:自定义完整性
二、约束
1、主键约束(primary key  缩写_pk)
2、外键约束(foreign key   缩写_fk)
3、唯一性约束(unique  key   缩写_uk)
4、检查约束(check   缩写_ck)
5、非空约束(not null    缩写_nn)

1、主键约束
1.1单个主键约束
1.1.1在列一级创建约束create table A(
id number primary key,
name varchar2(20),
age number,
sex varchar2(10)
);
create table B(
id number,
name varchar2(20),
age number,
sex varchar2(10),
constraint a_pk primary key (id)
);
insert into B (name,age,sex) values('zcx',10,'男');

insert into A values(01,'zcx',20,'男');
/*错误例子*/
insert into A(name,age,sex) values('zcx',20,'男');
主键必须为非空并且唯一不能重复

1.1.2在表级创建约束create table B(
id number,
name varchar2(20),
age number,
sex varchar2(10),
constraint a_pk primary key (id)
);
/*错误例子*/
insert into B (name,age,sex) values('zcx',10,'男');
1.1.3在现有表中创建约束alter table B
add constraint b_pk primary key (id);
1.2组合主键(复合主键)
    1.2.1在表一级中创建复合主键约束create table B(
id number,
name varchar2(20),
age number,
sex varchar2(10),
constraint bb_pk primary key (id,name)
);1.2.2在现有表中添加复合主键约束
前提是已经创建一个B表alter table B
add constraint bb_pk primary key(id,name);

2、外键约束
2.1使用列级创建外键约束
    首选有外键就得有两张表吧,

顾客表cust:(cid,cname,caddr)
订单表orders:(oid,cid,omsg)create table cust(
cid varchar2(10) primary key,
cname varchar2(20),
caddr varchar2(25)
);

create table orders(
oid varchar2(10) primary key,
cid varchar2(10) constraint bb_fk references cust(cid),/*这里不能直接再写一个primary key了,一个表只能写一个*/
omsg varchar2(30)
);2.2使用表级创建外键约束
主表:custs  要有主键
从表:orderscreate table orders(
       oid varchar2(10) primary key,/*一定要写主键*/
       cid varchar2(10),
       omsg varchar2(30),
       constraint bb_fk foreign key(cid) references cust(cid)/*这是写外键,这里必须是cid对应cid,否则逻辑不通*/
);
2.3在已有表中创建外键约束
注意这里边orders表里边没有设定主键,否则报错alter table orders
add constraint bb_fk foreign key (cid) references cust(cid);
3、添加关键字 on delete cascade 级联删除
    级联删除是指在父表中删除一条记录,对应子表中的数据也会被删去
create table orders(
oid varchar2(10) primary key,
cid varchar2(10),
omsg varchar2(30),
constraint bb_fk foreign key(cid) references cust(cid) on delete cascade
);
insert into cust values('01','02','男');
insert into orders values('001','01','男');
/*测试语句*/
delete from cust where cid='01';/*在删除cust表中的数据后,在orders表中的数据同样也会被删除*/
4、唯一约束
4.1在列级中添加唯一约束create table aas(
cid varchar2(10) primary key,
cname varchar2(20) unique,
caddr varchar2(25)
);

insert into aas values('01','02','男');
insert into aas values('02','02','男');4.2在表级中添加唯一约束create table bbs(
cid varchar2(10) primary key,
cname varchar2(20),
caddr varchar2(25),
constraint name_uk unique(cname)
);
insert into bbs values('01','02','男');
insert into bbs values('02','02','男');4.3在已有表中添加唯一约束create table ccs(
cid varchar2(10) primary key,
cname varchar2(20),
caddr varchar2(25)
);
alter table ccs
add constraint cname_uk unique (cname);总结:
主键约束:唯一、非空、只能有一个主键约束
唯一约束:唯一、可为空、可以有多个唯一约束
5、check检查约束
5.1在列级中创建检查约束create table students(
sid varchar2(10) primary key,
sname varchar2(20),
ssex varchar2(4) check(ssex='男' or ssex='女') /*'='是赋值符号,'=='是等号*/
);

insert into students values('201501','zcx','男');
/*错误例子*/
insert into students values('201501','zcx','11');
5.2在已有表中创建检查约束alter table students
add constraint ssex_ck check(ssex='男' or ssex='女');5.3在表级中添加检查约束create table students11(
sid varchar2(10) primary key,
sname varchar2(20),
sage number,
ssex varchar2(4),
constraint age_ck check(sage>=0 and sage<=150)
);
/*错误示范*/
insert into students11 values('201501','zcx',160,'11');6、非空约束
6.1使用列级创建非空约束create table aa(
aid varchar2(10) primary key,
aname varchar2(20) not null,
aage number,
asex varchar2(4)
);
insert into aa(aid,aage,asex) values('201',160,'11');6.2在现有表中添加非空约束
其实not null约束是特殊check约束alter table aa
modify (aname constraint aname_nn not null);7、查看约束select constraint_name,constraint_type from user_constraints;8、禁用/重启约束
8.1禁用:create table bb( /*创建一个表*/
 id varchar2(10),
 name varchar2(20)
);
alter table bb
modify(name constraint name_nn not null); /*创建非空约束*/
alter table bb /*禁用约束*/
disable constraint name_nn;8.2重启约束alter table bb
enable constraint name_nn;9、删除约束alter table bb
drop constraint name_nn;

----zcx&&
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: