sql 数据库完整性

完整性约束条件也称之为完整性规则,是数据库中的数据必须满足的语义约束条件。它表达了给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的真确、有效和相容。

1、实体完整性--主键(primary key)

关系模型的实体完整性在create table 中用primary key 定义。对单属性构成的码有两种说明方法:一种是定义为列级约束条件,另一个是定义为表级约束条件。对多个属性构成的码只有一种说法,即定义为表级约束条件。

1》检查主码值是否唯一,如果不唯一则拒绝插入或修改。

2》检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。从而保证了实体完整性。

例:将Websites表中的id定义为主键:

 create table Websites (
     id int(8) primary key,
     name varchar(30),
     url varchar(30),
     alexa int(8),
     country char(6)
 );

 create table Websites (
     id int(8),
     name varchar(30),
     url varchar(30),
     alexa int(8),
     country char(6),
     primary key (id)
 );

将 access_log 表中的 aid 和 site_id 定义为主键

create table access_log
  (aid int(4),
  site_id int(4),
  count int(8),
  date datetime,
  primary key (aid,site_id)
  );

2、参照完整性--外键

参照完整性在 create table 中的 foreign key 短语定义哪些列为外码,用 references 短语指明这些外码参照哪些表的主码。

外键是指在表中保存其他表的主键,同样的外键一样需要设置 not null 约束。

create table access_log
  (
  foreign key (aid) references access_log(aid),
  foreign key (site_id) references Websites(site_id)
  );

参照完整性将两个表中的相应元组联系起来。因此,对被参照表和参照表进行增、删、改操作时有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。

3、用户定义的完整性

用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。目前的关系数据库管理系统都提供了定义和检验这类完整性的机制,使用了和实体完整性、参照完整性相同的技术和方法来处理它们,而不必由应用程序承担这一功能。

1》属性上的约束条件

在create table中定义属性的同事,可以根据应用要去定义属性上的约束条件,即属性值限制,包括:

  • 列值非空(not null)
  • 列值唯一(unique)
  • 检查列值是否满足条件表达式(check短语)。
  • default 约束用于向列中插入默认值。

当往表中插入元组或修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行。

2》元组上的约束条件

与属性上约束条件的定义类似,在create table 语句中可以用check 短语定义元组上的约束条件,即元组级的限制。同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件。

当往表中插入元组或修改属性的值时,关系数据库管理系统将检查元组上的约束条件是否被否满足,如果不满足则操作被拒绝执行。

4、完整性约束命名子句

以上讲解的完整性约,束条件都在create table 语句中定义,sql还在create table 语句中提供了完整性约束命名子句 constraint,用来对完整性约束条件命名,从而可以灵活地增加、删除一个完整性约束条件。

1》完整性约束命名子句:

constraint <完整性约束条件名><完整性约束条件>

<完整性约束条件>包括not null、unique、primary key、foreign key、check短语等。

2》修改表中的完整性限制

可以使用 alter table 语句修改表中的完整性限制。

5、域中的完整性限制

域是数据库中一个重要概念。一般地,域是一组具有相同数据类型的值的集合。sql支持域的概念,并可以用create domain 语句建议一个域以及域应该满足的完整性约束条件,然后就可以用域来定义属性。这样定义的优点是,数据库中不同的属性可以来自同一个域,当域上的完整系约束条件改变时只要修改域的定义即可,而不必一一修改域上的各个属性。

posted @ 2022-12-05 17:55  空岛迷梦  阅读(696)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css