资讯专栏INFORMATION COLUMN

数据库的完整性约束

hikui / 3094人阅读

摘要:完整性约束条件的作用对象列级约束针对字段,主要针对列的类型,取值范围,精度等约束对空值的约束。实体完整性实体的完整性是通过主键约束和候选键约束来实现的。

完整性约束条件的作用对象:

列级约束(针对字段,key)

主要针对列的类型,取值范围,精度等约束

- 对空值的约束。规定某个字段是否为空
- 对取值范围的约束。例如,学生成绩的字段规定为 0 - 100
- 数据类型的约束。包括数据类型,长度,精度等。例如常用的定长 varchar
- 数据格式的约束。例如,学生表中的学号 stu_no 字段,认为规定前四位为入学年份,后面是院系的编号等

元组(或称作 row,一条数据)约束

元组中字段之间的约束。例如,一个活动的开始时间必须早于它的结束时间

表级约束(外键)

指多个元组之间,关系之间的联系的约束。例如,学生成绩表中的 stu_no 字段,实际取值源于 学生表中的 stu_no 字段

以上是一些约束的概念,理论上的,如何实现约束,请往下看。

实体完整性

实体的完整性是通过主键(primary key)约束和候选键(candidate key)约束来实现的。所以前提条件是要了解键的一些概念和分类:

key:用于保证元组的唯一性

super-key:能够区分唯一的元组的集合

candidate key:super-key 中最小集

primary key:candidate key 中人工选择一个(一张表只能有一个或多个组成的联合主键)

举个例子:例如有 students 表,含有字段 stu_number(学号)id(身份证号)name(姓名) 那么找出所有能够保证元组唯一性的super-key={{stu_number}, {id}, {stu_number, name}, {id, name}, {stu_number, id}, {stu_number, id, name}}然后可得 candidate key=stu_number 或 id

主键约束

每张表只能定义一个主键或多个主键组合的联合主键(复合主键)

确保能够根据主键查询到唯一的元组,且不能为 NULL,这是唯一性原则

联合主键不能包含不必要的字段。也就是说,从联合主键中删除其中一列后,还能保证唯一性,那么是不正确的。因为要满足最小集原则

一个字段只能在联合主键中出现一次。因为集合的元素是唯一的

创建主键约束

可以在 CREATE TABLE 或 ALTER TABLE 语句中使用 PRIMARY KEY 来实现

唯一主键:直接在某个字段后加上关键字

联合主键:PRIMARY KEY(column_0, column_1, ...)

创建主键后,数据库会自动创建唯一索引,用于对主键的快速查询,索引名默认为PRIMARY,也可以重新自定义命名

创建候选键索引

可以在 CREATE TABLE 或 ALTER TABLE 语句中使用 UNIQUE 来实现

主键和候选键一样,只不过主键是唯一的,候选键可以是多个,所以同样具有唯一性,且不能为 NULL

创建候选键后,数据库也会自动创建 UNIQUE 索引

参照完整性(reference 或称作引用)

可以在 CREATE TABLE 或 ALTER TABLE 语句中使用 FOREIGN KEY 和 REFERENCES 来实现

FOREIGN KEY(column_name, ...)
        REFERENCES table_name(column_name, ...)
        [ON DELETE reference_option] 
        [ON UPDATE reference_option] 
#column_name 的语法格式为:column_name [(length)] [ASC | DESC]
#refrence_option 提供选项有:RESTRICT | CASCADE | SET NULL | NO ACTION

关键字ON DELETEON UPDATE 是指定参照的动作,只要涉及这两个动作,系统就会检查完整性约束,即refrence_option,如果没有明确指定,那么其默认值为RESTRICT

RESTRICT :拒绝操作,当删除或更新被参照表时涉及到了被参照的字段,并且该字段在外键中存在数据,那么系统将拒绝操作

CASCADE :级联操作,当删除或更新被参照表时,会同时删除或更新参照表中的匹配的元组

SET NULL :置空操作,当删除或更新被参照表时,会将参照表中对应的外键字段的值设为NULL,前提是该字段在参照表中没有声明NOT NULL

NO ACTION :不做操作,和 RESTRICT 相同

参照表:声明了```FOREIGN KEY```的表 A。被参照表:主键被表 A 声明为```FOREIGN KEY```

举个例子:学生有选历史课,但是现在学校决定不开设历史课了,要把历史课从课程表删除,但是删除的时候会检查有没有被引用,如果存在引用则删除失败,这就是```RESTRICT```。如果删除历史课的同时,将所有学生选课表中的历史课也删除,这就是```CASCADE```。如果删除了历史课,只是将选课表中的历史课设为```NULL```,这就是```SET NULL```,万一哪天又恢复历史课呢           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32392.html

相关文章

  • SQL Server初识(语言基础及数据定义功能)

    摘要:定义外码的语法格式为列名外表名外表列名其中各项含义为级联删除。实现数据的完整性主码约束添加主码约束注意每个表只有能有一个约束用约束的列取值不能有重复,而且不允许有空值。语法表名约束名列名为雇员表电话号码列添加约束。 一.Sql Management的简单的使用:1.第一次运行默认windows混合模式直接点击连接 showImg(https://segmentfault.com/img...

    spademan 评论0 收藏0
  • MySQL——约束

    摘要:其它操作删除主键约束表名添加主键表名列名修改列为主键表名列名数据类型外键约束外键约束是保证一个或两个表之间的参照完整性保持数据一致性。 一. 关系型数据库 市场上主流的关系型数据库:Oracle、DB2、Sybase 、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL。关系型数据库有三大完整性: 实体完整性:实体属性中的标识...

    voidking 评论0 收藏0
  • MySQL——约束

    摘要:其它操作删除主键约束表名添加主键表名列名修改列为主键表名列名数据类型外键约束外键约束是保证一个或两个表之间的参照完整性保持数据一致性。 一. 关系型数据库 市场上主流的关系型数据库:Oracle、DB2、Sybase 、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL。关系型数据库有三大完整性: 实体完整性:实体属性中的标识...

    Lemon_95 评论0 收藏0
  • MySQL——约束

    摘要:其它操作删除主键约束表名添加主键表名列名修改列为主键表名列名数据类型外键约束外键约束是保证一个或两个表之间的参照完整性保持数据一致性。 一. 关系型数据库 市场上主流的关系型数据库:Oracle、DB2、Sybase 、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL。关系型数据库有三大完整性: 实体完整性:实体属性中的标识...

    lyning 评论0 收藏0
  • 据库整性约束

    摘要:完整性约束条件的作用对象列级约束针对字段,主要针对列的类型,取值范围,精度等约束对空值的约束。实体完整性实体的完整性是通过主键约束和候选键约束来实现的。 完整性约束条件的作用对象: 列级约束(针对字段,key) 主要针对列的类型,取值范围,精度等约束 - 对空值的约束。规定某个字段是否为空 - 对取值范围的约束。例如,学生成绩的字段规定为 0 - 100 - 数据类型的约束。包括数据类...

    KitorinZero 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<