2020/02/24,mysql建库及修改约束性条件规则补充,25日已补充完毕。
数据完整性约束是对关系性模型完整性规则做某种约束条件。
主要是保证数据库内应用数据的正确性和一致性,防止数据库中存在不符合语义的,不正确的数据。
关系模型中的三类约束:一,实体完整性
二,参照完整性
三,用户定义完整性
一旦定义了完整性约束,服务器会随时检测处于更新状态的数据库内容时候符合相关约束性,保证数据正常。
一,实体完整性:是指关系的主属性不能取空值,即主键和候选键在关系中所对应的属性都不能取空值。主要通过主键约束和候选键约束实现
1,主键约束,主键是表中某一列和某些列所构成的一个组合。其中多个列组合的主键也称复合主键,主键必须唯一,且构成主键的每一列值不能为空值,规则如下:
A,每个表只能有一个主键
B,健值即主键,必须能够唯一标识表中每一行记录,且不能为NULL,两个不同的记录在主键上不能具有相同的值,唯一性原则
C,复合主键不能包含不必要的多余列,即对复合主键删除一列条件后,如果剩下的列仍能满足唯一性原则,则这个复合主键是不正确的
D,一个列名在复合主键的列表中只能出现一次
相关表达式:primary key-- 列级约束时在表中某个字段定义后添加|表级约束时在所有字段后添加
2,命名的约束是在各种完整性约束的定义说明前添加,即段首;表达式:constraint
3,候选键约束
候选键与主键一样,可以为表中某一列或者某些列所组成的组合,唯一且不能空值;
表达式:unique--后缀与某列字段条件后
*primary key 与unique定义约束区别:只能创建一个primary key,可创建多个unique(此处疑问与候选键定义冲突待解决);primary key不能为空值,unique可以不为空值(此处疑问与候选键定义冲突待解决);primary key定义约束时,系统会自动产生primary key索引,unique时则为unique索引
二,定义参照完整性
按外键与主键之间的引用规则,即外键的取值或者为空,或者等于被参照中的某个主键的值。
1,定义外键时,需要注意规则:
a,被参照表必须已经使用create table 语句创建,或者必须是当前正在创建表,若为后者则为自参照完整性即参照表与被参照表是同一个表
b,必须为被参照表定义主键或候选健
c,必须在被参照表的后面指定列名和列民组合,且必须为被参照表的主键或候选键
d,可以允许外键为空值
e,外键对应列的数目必须和被参照表主键对应数目一致
f,外键对应列的数据类型和被参照表主键对应数据类型相同
给外键定义参照动作满足,指定参照动作适用;指定采取动作,具体策略如下:
restrict:限制策略,即当要删除或修改被参照值列上且外键中出现的值时,系统拒绝对被参照表的删除或修改操作
cascade:级联策略,即从被参照表中删除或修改记录时,自动删除或修改参照表中的匹配记录。
set null:置空策略,当从被参照表中删除或修改记录时,设置参照表中与之对应的外键列的值为NULL。
no avtion:不采取实施策略,即当一个相关外键值在被参照表中时,删除或修改被参照表中健值的动作不被允许
set default:默认值策略,删除或修改记录行时,设置参照表中与之对应的外键列的值为默认值。
注意:外键只能引用主键和候选键;外键只可以使用存储引擎innoDB创建的表中,其他的存储引擎不支持外键。
三,用户定义完整性
根据不同的应用环境,设置特殊性约束条件,它反映某一具体应用所涉及的数据应满足语义要求。
它的目的在于用统一的方式由系统来处理,不在由应用程序来完成这项工作,在实际系统中,这里完整性规则的建立,应用编程人员不需在考虑,如未在建立定义表时,则应用编程人员应在各个模块的具体编程中通过应用程序检查和控制。
主要有:非空约束;chehk约束和触发器。
1,非空约束,字段不能为空,可在create table或alter table 在某个列定义后加上关键字not null
2,check 约束,同非空约束一样,约束列级及表级,语法为:check(expr),expr是个表达式。
3,触发器(单独总结)
另,更新完整性约束
1,删除约束:drop table
a,alter table drop foreign key
修改前可先用show create table 查看约束语言
b,alter table drop primary key-- 删除约束主键
c,alter table drop{ 约束名|候选字段名}-- 删除候选键
d,alter table add [constraint] primary key|foreign key|unique key-- 添加主键约束/外键字段/候选字段。
完整性约束不能直接被修改,需要修改某个约束时,实际上是用alter table 语句先删除改约束,然后在增加一个与该约束同名的新约束。