4

《MySQL入门很轻松》第5章:数据完整性及其分类 - InfoQ 写作平台

 2 years ago
source link: https://xie.infoq.cn/article/ac4fa79177d6c8ab6acbdc910
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1.数据完整性分类

数据库不仅要能存储数据,它也必须能够保证所保存的数据的正确性,为此 MySQL 为用户提高了完整性约束条件。数据完整性可分为实体完整性、域完整性和引用完整性,下面进行详细介绍。(1) 实体完整性:指通过表中字段或字段组合将表中各记录的唯一性区别开来。例如,在学生表中,学生之间可能姓名相同,班级编号相同,但是每个学生的学号必然不同。实体完整性的实施方法是添加 PRIMARY KEY 约束和 UNIQUE 约束。(2)域完整性:指表中特定字段的值是有效取值。虽然每个字段都有数据类型,但实际并非满足该数据类型的值即为有效,应合乎情理。例如,学生的出生日期不可能晚于录入数据当天的日期天的日期。域完整性的实施方法是添加 CHECK 约束和 DEFAULT 约束。(3)引用完整性:数据库中的表和表之间的字段值是有联系的,甚至表自身的字段值也是有联系的,其中一个表中的某个字段值不但要符合其数据类型,而且必须是引用另一个表中某个字段现有的值。在输入或删除数据记录时,这种引用关系也不能被破坏,这就是引用完整性,它的作用是确保在所有表中具有相同意义的字段值一致,不能引用不存在的值。引用完整性的实施方法是添加 PRIMARY KEY 约束。

###2. 数据表的约束条件

在数据表中添加约束条件归根到底就是要确保数据的准确性和一致性,即表内的数据不相互矛盾,表之间的数据不相矛盾,关联性不被破坏。为此,可以从以下几个方面检查数据表的完整性约束。(1)对列的控制,包括主键约束(PRIMARY KEY)、唯一性约束(UNIQUE) ;(2)对列数据的控制,包括检查约束(CHECK)、默认值约束(DEFAULT)、非空约束(NOT NULL);(3)对表之间及列之间关系的控制,包括外键约束(FOREIGN KEY)。满足完整性约束要求的数据必须具有以下 3 个特点。(1)数据值正确无误:首先数据类型必须正确,其次数据的值必须处于正确的范围内。例如,“成绩”表中“成绩”字段的值必须大于或等于 0 小于或等于 100。(2)数据的存储必须确保同一表格数据之间的和谐关系。例如,“成绩”表中的“学号”字段列中的每一个学号对应一个学生,不可能将其学号对应多个学生。(3)数据的存储必须确保维护不同表之间的和谐关系。例如,在“成绩”表中的“课程编号”列对应“课程”表中的“课程编号”列;在“课程”表中的“教师编号”列对应“教师”表中的“教师编号”列。

3. 主键约束

主键,又称主码,是表中一列或多列的组合。主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的。主键分为两种类型:单字段和多字段联合主键。

3.1 创建表时添加主键

如果主键包含一个字段,则所有记录的该字段值不能相同或为空值;如果主键包含多个字段,则所有记录的该字段值的组合不能相同,而单个字段值可以相同,一个表中只能有一个主键,也就是说只能有一个 PRIMARY KEY 约束。注意:数据类型为 IMAGE 和 TEXT 的字段列不能定义为主键。创建表时创建主键的方法是在数据列的后面直接添加关键字 PRIMARY KEY,语法格式如下:

字段名 数据类型 PRIMARY KEY

约束名:设置主键约束的名称。

PRIMARY KEY:表示所添加约束的类型为主键约束。

字段名:表示要添加主键约束的字段。

在 hotel 数据库中定义数据表 Roominfo_01,为 Roommid 创建主键约束

SQL 语句如下:

create table Roominfo_01  --创建Roominfo_01数据表(  Roomid     int,              --定义房间编号  Roomtype   varchar(20),      --定义房间类型  Roomprice  float,            --定义房间价格  Roomfloor  int,              --定义房间所在楼层  Roomface  varchar(20)        --定义房间朝向  primary    key(Roomid)       --定义房间编号为主键约束);

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK