在上一篇文章中,我们已经对完整性约束有了一定的概念,并且做了分类。
实验操作放在另外一篇文章
分类:1.实体完整性约束2.域完整性约束3.
那么怎么实现完整性约束呢?
1.完整性规则的定义:通过SQL,也可以SSMS交互式创建
2.(运行时)进行完整性规则的检查
一、实体完整性约束
1.主码(primary key)约束
-->可以定义为表级约束条件,也可以定义为列级约束条件
区别:
2.唯一(unique)约束
对于指定的一个属性或者属性集合,不允许出现重复的值。
注意区别primary key约束
-->一个数据表只能创建一个primary key约束(可以有多个列,但是primary key只能出现一次),但一个表中可以根据需要对不同的列创建若干个unique约束(unique约束和primary key约束一样也能在表级约束定义)
-->primary key的字段取值不能为null,因为它是区分该表中此记录和其它记录的一个键值。而unique字段的值可以取null
-->建立主键的目的是为了让外键使用,所以不允许存在空值
-->一般创建primary key约束的时候,系统会自动产生一个索引,默认类型为簇索引。创建unique约束时,系统会创建一个unique索引,索引的类型默认为非簇索引。但是也可以指定创建。
****************************************************************************************************************************
索引:根据索引可以找到对应的物理地址,从而更容易找到需要的数据的地址。例如查字典,找到偏旁,再找要查的字。
簇索引:顺序结构和物理结构一致的一种索引,查字典,通过拼音查找该字,而拼音是按照ABCDEF排序的,对应的字也是按照ABCDEF排序。
非簇索引:顺序结构和物理结构不一致的一种索引。通过部首查字法来查找该字,没有一定的顺序。
****************************************************************************************************************************
注意,如果表中已经有数据,建立主键/唯一约束可能会出错。
二、域完整性约束
1.非空(not null)约束
-->声明某个属性不能取空值
2.缺省(default)约束
-->如果列中没有输入值就会填充默认值。
非空约束只在列级约束条件中定义,不能在表级约束条件中定义。
-->修改表创建默认约束,建立好一张表之后,通过修改该表来创建一个默认约束
表的创建:
修改表添加默认约束:
3.检查(check)约束
一个字段的输入必须满足check约束的条件,否则不能正常输入。例如:sex只能取男或女,不能取其他的值,此时可以定义一个check约束来约束当前列的取值。注意:timestamp和identity两种类型的字段不能定义check约束。
两种定义方法:
具体的实验操作和步骤以及注意事项会另外写一篇文章
三、参照完整性约束
1.外键(foreign key)约束
-->cascade级联删除和级联更新(以下表为例,班级表是主表,学生表是从表)
级联删除就是删除主键表数据的同时,外键表的数据也同时删除。
级联更新就是更新主键表数据的同时,外键表的数据也同时更新。
-->no action方式
不允许删除,将不会对表产生影响。
-->set null方式
将所有的外码值设置为空值。