数据库5之完整性约束的实现

时间:2024-04-06 12:21:20

在上一篇文章中,我们已经对完整性约束有了一定的概念,并且做了分类。

实验操作放在另外一篇文章

分类:1.实体完整性约束2.域完整性约束3.

那么怎么实现完整性约束呢?

1.完整性规则的定义:通过SQL,也可以SSMS交互式创建

2.(运行时)进行完整性规则的检查

一、实体完整性约束

1.主码(primary key)约束

-->可以定义为表级约束条件,也可以定义为列级约束条件

区别:

数据库5之完整性约束的实现

数据库5之完整性约束的实现

数据库5之完整性约束的实现

2.唯一(unique)约束

对于指定的一个属性或者属性集合,不允许出现重复的值。

注意区别primary key约束

-->一个数据表只能创建一个primary key约束(可以有多个列,但是primary key只能出现一次),但一个表中可以根据需要对不同的列创建若干个unique约束(unique约束和primary key约束一样也能在表级约束定义)

-->primary key的字段取值不能为null,因为它是区分该表中此记录和其它记录的一个键值。而unique字段的值可以取null

-->建立主键的目的是为了让外键使用,所以不允许存在空值

-->一般创建primary key约束的时候,系统会自动产生一个索引,默认类型为簇索引。创建unique约束时,系统会创建一个unique索引,索引的类型默认为非簇索引。但是也可以指定创建。

数据库5之完整性约束的实现

****************************************************************************************************************************

索引:根据索引可以找到对应的物理地址,从而更容易找到需要的数据的地址。例如查字典,找到偏旁,再找要查的字。

簇索引:顺序结构和物理结构一致的一种索引,查字典,通过拼音查找该字,而拼音是按照ABCDEF排序的,对应的字也是按照ABCDEF排序。

非簇索引:顺序结构和物理结构不一致的一种索引。通过部首查字法来查找该字,没有一定的顺序。

****************************************************************************************************************************

注意,如果表中已经有数据,建立主键/唯一约束可能会出错。

二、域完整性约束

1.非空(not null)约束

-->声明某个属性不能取空值

2.缺省(default)约束

-->如果列中没有输入值就会填充默认值。

非空约束只在列级约束条件中定义,不能在表级约束条件中定义。

数据库5之完整性约束的实现

-->修改表创建默认约束,建立好一张表之后,通过修改该表来创建一个默认约束

表的创建:

数据库5之完整性约束的实现

修改表添加默认约束:

数据库5之完整性约束的实现

3.检查(check)约束

一个字段的输入必须满足check约束的条件,否则不能正常输入。例如:sex只能取男或女,不能取其他的值,此时可以定义一个check约束来约束当前列的取值。注意:timestamp和identity两种类型的字段不能定义check约束。

两种定义方法:

数据库5之完整性约束的实现

数据库5之完整性约束的实现

具体的实验操作和步骤以及注意事项会另外写一篇文章

三、参照完整性约束

1.外键(foreign key)约束

-->cascade级联删除和级联更新(以下表为例,班级表是主表,学生表是从表)

级联删除就是删除主键表数据的同时,外键表的数据也同时删除。

数据库5之完整性约束的实现

级联更新就是更新主键表数据的同时,外键表的数据也同时更新。

数据库5之完整性约束的实现

-->no action方式

不允许删除,将不会对表产生影响。

数据库5之完整性约束的实现

-->set null方式

将所有的外码值设置为空值。