数据完整性数据库
1.什么是数据完整性?
存储在数据库中的数据可以正确的反映实际状况,规定数据的输入数据不能是无效值,错误值和乱码等。rem
2.数据完整性的类型
(1)实体完整性:标识符或主键的完整性,使其值惟一
(2)域完整性:限制类型,格式和取值范围
(3)引用完整性:保持原表和引用表数据一致性
(4)用户自定义完整性:根据用户的要求自定义业务规则io
3.数据完整性的实现方式
实体完整性:主键约束、惟一的约束
域完整性:检查约束、默认值约束、外键约束
引用完整性:外键约束
用户自定义完整性:以上全部约束自由组合table
4.什么是约束?
经过建立表来限制属性或表中数据的完整性,也能够经过修改语句修改约束条件。class
约束又分为行级约束和表级约束,行级约束和表级约束本质上是同样的,只是约束范围不一样。基础
非空约束、主键约束通常为行级约束,
外键约束(联合主键)是表级约束;
检查约束(check)随意乱码
2、非空约束
确保当前约束的属性不为空置,行级约束
非空约束的关键字: not nulldate
3、惟一约束
指定某一列或某几列的数据不能重复
惟一约束关键字:unique数据类型
能够经过constaint给约束取名,方便根据名称删除约束;引用
同时设定非空和惟一默认为主键
建立复合惟一约束(表级约束)
对多个列进行惟一约束,约束两个以上的字段(属性)不能同时一致。
constraint uni_tno_tname unqiue(t_no,t_name)
这里教师编号与教师名称能够容许其中一个是相同的,但不能同时相同。
4、主键约束
非空约束+惟一约束,且每一个表只能有一个主键约束(表级),在多列联合的主键约束时,联合主键的值不能重复。
主键约束关键字:primaty key。
若是数据表的属性列中存在重复或者null值,就没法以此属性为主键
1.在建立表时设置主键约束
设置单列主键
s_no int primaty key,
设置多个属性为联合主键
constraint pri_tno_tname primary key(t_no,t_name)
2.添加主键约束
alter table teacher add constraint pri_tno_tname
primaty key(t_no);
3.删除主键约束
alter table teacher drop primary key;
4.自增列
在插入数据时,若是不规定属性的值,其值就会根据上一个属性的值自动加1。
自增列关键字:auto_increment
属性给空值时,初始默认值从1开始,以后的每个在其基础上+1。
在建立时能够在表后设置初始默认值:auto_increment=100
去掉自增列属性与以前的方法一致。
5、检查约束
检查约束就是检查列中属性的取值范围。
检查约束关键字:check。
如:t_age int check(age>0 and age<200)
t_sex varchar(4) check(t_sex='男' or t_sex='女')
MySQL不支持check,须要在外部进行判断。
6、默认值约束
默认值关键字:default
1.建立表属性时添加默认值约束
s_subject varchar(20) default 'C++',
2.添加默认约束
alter table student modify column
3.删除默认值约束
与添加默认值方法一致,只是不加默认值关键字就能够了。
7、外键约束
一个表中的属性值参考另外一个表中的主属性的值,也就是外键值参考主键值,因为外键约束是表级约束,参考主键值,因此要在建立表以前先建立参考表
外键约束关键字:foreign key(属性名)reference 表名(属性)
外键约束属性数据类型必须相同
1.建立表时创建外键约束
外键和参考表的主键数据类型,长度和精度要保持一致
c_no int not null
constraint for_cno foreign key(cno)
2.添加外键约束
因为外键约束是表级约束,须要关键字add。
alter table strudent add constraint for_cno
froeign key(c_no) references class(class_no);
3.删除外键约束
alter table student drop constraint for_cno;
4.级联更新/删除
是指父表中的元组更新或删除等操做对子表的处理方法。
其中有三种处理方式,分别是:
在更新/删除中(on update/on delete)
(1)cascade:父表中的元组更新或删除,子表中跟着更新或删除。在语句以后加上on update(或on delete)cascade
(2)no action:无动做,若子表中有匹配的记录,就不容许更新或删除父表数据。加上on update(或on delete)no action
(3)set null:设置为空,若子表中有匹配的记录,父表数据更新或删除,子表中对应数据变为null。on update set null
这些操做是对于父表的更新或者删除而言的,使用格式:on update(cascade/no action/set null)列如:on update cascade,on delete (cascade/no action/set null)列如:on delete set null;