写点什么

《MySQL 入门很轻松》第 5 章:数据完整性及其分类

作者:乌龟哥哥
  • 2022 年 9 月 30 日
    上海
  • 本文字数:2969 字

    阅读完需:约 10 分钟

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:麦示所添加约束的类型为主键约束。


假如,要在酒店客户管理系统的数据库 company 中创建一个数据表用于保存房间信息,并给房间编号添加主键约束,表的字段名和数据类型如下表所示。



在数据库中定义 Roominfo,为 Roomid 创建主键约束


create table Roominfo           --创建Roominfo数据表(  Roomid       int primary key,           --定义房间编号  Roomtype     varchar(20),  --定义房间类型  Roomprice    float,      --定义房间价格  Roomfloor    int,      --定义房间所在楼层  Roomface     varchar(20)  --定义房间朝向
);
复制代码




在 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)      --定义房间编号为主键约束);
复制代码



3.2 修改表时添加主键

数据表创建完成后,如果还需要为数据表创建主键约束,此时不需要再重新创建数据表。可以使用 Alter 语句为现有表添加主键。使用 ALTER 语句在现有数据表中创建主键,语法格式如下:


ALTERTABLE table nameADD CONSTRAINT 约束名 PRIMARY KEY (column_namel,column_name2,…)
复制代码


主要参数介绍如下。


CONSTRAINT:创建约束的关键字。


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


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


  • 举例说明


在 Hotel 数据库中定义数据表 Roominfo_02,创建完成之后,在该表中的 Roomid 字段上创建主键约束。输入以下 SQL 语句:


CREATE TABLE Roominfo_02  --创建Roominfo_02数据表(--定义房间编号Roomid int NOT NULL, --定义房间类型Roomtype varchar(20), --定义房间价格Roomprice float, --定义所在楼层Roomfloor int, --定义所在楼层Roomface varchar(10) --定义房间朝向
);
复制代码



下面给 Roomid 字段添加主键,输入 SOL 语句:


ALTER TABLE Roominfo_02ADDCONSTRAINT  编号PRIMARY KEY (Roomid);
复制代码


单击“执行”按钮,即可完成创建主键的操作,如图所示。执行完成之后使用“DESC Roominfo_02;”语句查看表结构,执行结果如图所示。从结果可以看出 Roomid 字段上设置了主键约束。



3.3 创建联合主键约束

在数据表中,可以定义多个字段为联合主键约束,如果对多字段定义了 PRIMARY KEY 约束,则一列中的值可能会重复,但来自 PRIMARYKEY 约束定义中所有列的任何值组合必须唯一。语法格式如下:


PRIMARY KEY[字段1,字段2,…,字段n]
复制代码


主要参数介绍如下:


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


字段 n:表示要添加主键的多个字段。


举例说明


在 Hotel 数据库中,定义客户信息数据表 userinfo,假设表中没有主键 id,为了唯一确定一个客户信息,可以把 name、tel 联合起来作为主键。输入的 SQL 语句如下:


CREATE TABLE userinfo --创建userinfo数据表(name varchar(20), --定义客户名称sex tinyint, --定义客户性别age int, --定义客户年龄tel varchar (10), --定义客户联系方式Roomid int, --定义客户入住房间CONSTRAINT 姓名联系方式 PRIMARY KEY (name , tel));
复制代码



单击“执行”按钮,即可完成数据表的创建以及联合主键约束的添加操作,如图所示。执行完成之后,使用“DESC userinfo;,”语句查看表结构,执行结果如图 5-10 所示,从结果可以看出 name 字段和 tel 字段组合在一起成为 userinfo 的多字段联合主键


3.4 删除表中的主键

当表中不需要指定 PRIMARY KEY 约束时,可以使用 DROP 语句将其删除。通过 DROP 语句删除 PRIMARY KEY 约束的语法格式如下:


ALTER TABLE table_name DROP PRIMARY KEY;
复制代码


主要参数介绍如下:


table_name:要删除的主键约束的表名


PRIMARY KEY:主键约束关键字。


举例说明


在 company 数据库中,删除 Roominfo 表中定义的王键。SQL 语句:


ALTER TABLE RoominfoDROPPRIMARY KEY;
复制代码



单击“执行”按钮,即可完成删除主键的操作,如图所示。执行完成之后,使用“DESC Roominfo;”语句查看表结构,执行结果如图所示,从结果可以看出该数据表中的主键已经被删除。



发布于: 刚刚阅读数: 3
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021.03.16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
《MySQL入门很轻松》第5章:数据完整性及其分类_9月月更_乌龟哥哥_InfoQ写作社区