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

一、数据完整性:                                (大多是由于设计引起的)

                可靠性+准确性=数据完整性

对于列来说:域的完整性

对于行来说:实体的完整性

对于两个表之间来说:引用完整性

对于某个单元格来说:自定义完整性

二、约束

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  要有主键

从表:orders

create 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&&


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值