MySQL数据操作与查询笔记 • 【第2章 表结构管理】
全部章节 >>>>
本章目录
2.2.2 使用 Navicat for MySQL 创建数据表结构
2.1 关系模型与数据表
2.1.1 关系模型
关系模型是由若干个关系模式组成的集合,关系模式的实例称为关系,每个关系实际上是一张二维表格。
关系模型用键导航数据,其表格简单。
|
订单号 |
客户 ID |
下单时间 |
订单金额 |
订单状态 |
|
DD201805200001 |
C10001 |
2018-5-2019:20:03 |
322.5 |
商品出库 |
|
DD201805220001 |
C10003 |
2018-5-229:13:20 |
530 |
物流揽收 |
|
DD201805220002 |
C10002 |
2018-5-2214:42:31 |
123.56 |
发往目的地 |
|
DD201805260002 |
C10001 |
2018-5-2610:13:25 |
210.2 |
客户签收 |
关系数据库是以关系模型为基础的数据库,是一种根据表、元组(记录)以及字段(列)之间的关系进行组织和访问数据的数据库,其通过若干个表来存取数据,并且通过关系将这些表联系在一起。
关系模型中的术语:
- 关系(Relation)对应通常所说的一张表,如订单表。
- 元组(Tuple)表中的一行即为一个元组,它可以标识实体集中的一个实体,元组亦可称作“记录(Record)”。表中任意两行(元组)不能相同。
- 属性(Attribute)表中的一列即为一个属性,给每个属性起一个名称即属性名,属性亦可称作列(Column),表中的属性名(列名)不能相同,每个属性都有值。
- 主键(Key)表中的某个属性组,它可以唯一确定一个元组,属性组可以有一个或多个属性。
- 关系模式:对关系的描述,可表示为关系名。
2.1.2 数据表
对于关系型数据库而言,一张表就是一个关系
在数据库中,数据表是数据存储的基本单位,是数据库中最重要、 最基本的操作对象。
数据表被定义为列的集合, 数据在表中是按照行和列的格式来存储的。
每一行代表一条唯一的记录,每一列代表记录中的一个域。
2.2 MySQL 数据类型
2.2.1 MySQL 常见数据类型
|
类型分类 |
类型 |
取值范围或描述 |
示例 |
|
整数类型 |
tinyint |
0 ~255 |
员工年龄:32 |
|
smallint |
-32768~32767 |
员工数:2540 |
|
|
int |
-2147483648~2147483647 |
中国人口数:1354040000 |
|
|
小数类型 |
decimal |
decimal(5,2)表示小数的取值范围是-999.99~999.99 |
商品单价:892.35 |
|
定长字符串类型 |
char |
char(10) 表示字符串存储 10 个字符,即便该字符串只有一个字符, 它所占用的存储空间也是 10 个字符空间大小 |
公司名:HUAWEI |
|
变长字符串类型 |
varchar |
varchar(10) 表示字符串最多存储10 个字符,如果该字符串仅包含一个字“中”,那么它所占用的存储空间也只是一个字符空间大小。定义 varchar 类型可节省存储空间 |
公司地址:武汉洪山区珞瑜路 546 路光谷科技会展中心 |
|
类型分类 |
类型 |
取值范围或描述 |
示例 |
|
日期类型 |
date |
格式:YYYY-MM-DD(年 - 月- 日)取值范围:1000-01-01 ~ 9999-12-31 |
出生日期:1982-03-24 |
|
日期类型 |
time |
格式:HH:MM:SS(时 : 分钟 : 秒)取值范围:-838:59:59 ~ 838:59:59 注意:时间不限当天 |
早晨上班时间:08:30:00 |
|
datetime |
格式:YYYY-MM-DD HH:MM:SS 取 值 范 围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
登 机 时 间:2015-05-1214:35:0 |
2.2.2 使用 Navicat for MySQL 创建数据表结构
数据库 bus 中公交线路表line
|
线路号 |
所属分公司 |
起点站 |
终点站 |
线路长度(km) |
车辆数 |
|
502 |
公交六公司 |
黄州街 108 街坊 |
桥口码头 |
23.7 |
15 |
|
503 |
公交二公司 |
文馨街文昌街口 |
沿江大道青岛路口 |
22.5 |
20 |
|
541 |
公交三公司 |
江盛路长江紫都 |
长丰大道东风村 |
27.3 |
17 |
|
605 |
公交三公司 |
古田二路翠堤春晓 |
梨园广场 |
24.4 |
16 |
|
607 |
公交四公司 |
园林路钢都花园 |
玉龙路朱家亭 |
28.2 |
19 |
|
609 |
公交五公司 |
沿河大道桥口码头 |
南湖公交场站 |
18.2 |
14 |
|
620 |
公交二公司 |
康居五路 |
汉黄路岱家山 |
16.2 |
12 |
线路表表结构
|
字段名 |
说 明 |
类 型 |
长 度 |
|
lineNo |
线路号 |
varchar |
10 |
|
company |
所属分公司 |
varchar |
20 |
|
from_station |
起点站 |
varchar |
20 |
|
to_station |
终点站 |
varchar |
20 |
|
miles |
线路长度 |
decimal(3,1) |
— |
|
number |
车辆数 |
smallint |
— |
线路号虽然显示为数字,但不宜采用数字类型,只能是字符串类型。因为线路号与身份证号类似,不仅有一定的编码规则,还可能出现字母。
利用 Navicat for MySQL 创建表



使用 Navicat for MySQL 维护数据表结构



2.3 数据完整性约束
2.3.1 数据完整性
为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改以及删除等操作时,DBMS 自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
数据完整性用于保证数据库中的数据在逻辑上的一致性、正确性和可靠性。
数据完整性主要包含:实体完整性、域完整性和参照完整性。
2.3.2 实体完整性约束
实体完整性规定表的每一行记录在表中是唯一的
实体完整性主要包含主键约束和唯一约束。
主键约束(Primary Key Constraint)用于唯一识别每一条记录,数据表中具有唯一值的字段可设定为主键字段。
主键选择策略:工程实践所推荐的做法是:新增一个无业务含义的字段作为主键,该字段为整数类型,且字段值自动增长。
线路表主键选择:在线路表中新增一个 int 类型的字段“线路编号(lineID)”,将该字段设置为主键且自动增长。当“线路编号”设置为自动增长时,则每次新增线路的“线路编号”值将从 1 开始,且每次递增 1。
在线路表中设置主键和主键自增长的具体做法如下:
- 新增字段“线路编号(lineID)”,设置该字段为 smallint 类型。
- 选中字段“lineID”,单击“
”,即设置“lineID”为主键,并勾选“自动递增”。

每个数据表只能有一个主键。设定为主键的字段内容不能有重复值,且不能为 null 值。
唯一约束(Unique Constraint):如果某个字段满足唯一性约束要求,则可以向该字段添加唯一性约束。
与主键约束相比,唯一约束也用于确保列中不存在重复值,但其列值可以是 null。
在线路表的“lineNo”上设置唯一约束:



主键约束要求列值非空,而唯一键约束允许列值为空。
2.3.3 域完整性
域完整性指给定列输入的有效性,即保证指定列的数据具有正确的数据类型、格式和有效的数据范围。
域完整性主要包含非空约束、默认值约束。
非空约束(Not Null Constraint):如果某个字段满足非空约束的要求,则应该在字段上设置非空约束。
示例:在线路表“所属公司”设置非空约束,只需在线路表设计窗口中选中“company”,取消勾选“允许空值”即可。
默认值约束(Default Constraint):如果某个字段满足默认值约束的要求,可向该字段添加默认值约束。
示例:在“company”列上设置默认值约束,默认值为“公交二公司”。

2.4 参照完整性约束
2.4.1 外键
在公交管理系统中规定营运车辆都隶属于某个具体的公交线路。因此应在车辆表设计一个字段,该字段与线路表的主键 lineID 的数据类型和长度大小应完全一致,并且值也参照线路表中的主键值。
这种参照其他表中主键的字段称为外键。
2.4.2 参照完整性定义
参照完整性是指通过定义一张表中外键与另一张表中主键之间的引用规则来约束这两张表之间的联系。
参照完整性的目的:
- 利用关联表之间的制约机制互相参照,控制表间数据的一致性和完整性。这种制约机制会在用户执行插入、修改或删除记录等编辑记录的操作时,发挥其限制作用。参照完整性有效地限制了对表中数据的非法编辑,参照完整性的实质就是不允许在相关数据表中引用那些不存在的记录。
参照完整性相关术语:
- 从表:含有外键且参照其他表的表,如车辆表。从表亦称作“子表”或“参照表”。
- 主表:被其他表参照的表,如线路表。主表亦称作“父表”或“被参照表”。
- 外键:从表中的参照列称为外键,外键名与被参照的主表中的主键数据类型应完全一致,但可以不同名。如车辆表中的字段“线路”。
- 被参照列:主表中的被参照列通常为主表的主键(也可以为唯一键)。如表的主键 lineID 为被参照列。

(1)参照完整性实现方法:通过定义外键与主键之间的对应关系来实现。
(2)参照完整性作用:保证从表中数据与主表中数据的一致性。当增加、修改或删除数据表中的记录时,可以借助参照完整性来保证相关联表之间数据的一致性。
2.4.3 设置外键约束实现参照完整性
公交车辆表 vehicle 的表结构:
|
字段名 |
说明 |
类型 |
长度 |
约束 |
|
vehicleID |
车辆编号 |
int |
— |
主键、自动增长 |
|
plateNo |
车牌号 |
varchar |
10 |
非空 |
|
model |
型号 |
varchar |
20 |
— |
|
type |
类型 |
varchar |
20 |
普通车、空调车 |
|
lineID |
线路编号 |
int |
— |
外键,参照 line 表 |
使用 Navicat for MySQL 在 vehicle 表的 lineID 上设置外键






测试添加从表数据一致性问题

总结:
- 数据完整性确保数据库中存储的数据正确、有效和相容。
- 数据完整性包括实体完整性、域完整性和参照完整性。
- 实体完整性约束包括主键约束和唯一约束。
- 域完整性约束包括非空约束和默认值约束。
- 参照完整性是指通过定义一张表中外键与另一张表中主键之间的引用规则来约束这两张表之间的联系。
- 参照其他表主键或唯一约束列的字段称为外键,外键用于实现参照完整性。包含外键的表称为从表或子表。
MySQL数据操作与查询笔记 • 【第2章 表结构管理】的更多相关文章
- MySQL数据操作与查询笔记 • 【目录】
持续更新中- 我的大学笔记>>> 章节 内容 第1章 MySQL数据操作与查询笔记 • [第1章 MySQL数据库基础] 第2章 MySQL数据操作与查询笔记 • [第2章 表结构管 ...
- MySQL数据操作与查询笔记 • 【第3章 DDL 和 DML】
全部章节 >>>> 本章目录 3.1 使用 DDL 定义数据库表结构 3.1.1 SQL 简介 3.1.2 维护数据库和创建数据表 3.2 使用 DDL 维护数据库表结构 ...
- MySQL 数据操作与查询笔记 • 【第1章 MySQL数据库基础】
全部章节 >>>> 本章目录 1.1 数据库简介 1.1.1 数据和数据库定义 1.1.2 数据库发展阶段 1.1.3 数据库系统组成 1.1.4 关系型数据库 1.2 M ...
- MySQL数据操作与查询笔记 • 【第7章 连接查询】
全部章节 >>>> 本章目录 7.1 内连接查询 7.1.1 交叉连接(笛卡尔积) 7.1.2 内连接查询概要 7.1.3 内连接案例 7.1.4 自然连接 7.2 多表连 ...
- MySQL数据操作与查询笔记 • 【第5章 MySQL 函数】
全部章节 >>>> 本章目录 5.1 数学函数和控制流函数 5.1.1 数学函数 5.1.2 控制流函数 5.2 字符串函数 5.2.1 字符串函数介绍 5.2.2 字符串 ...
- MySQL数据操作与查询笔记 • 【第6章 聚合函数和分组查询】
全部章节 >>>> 本章目录 6.1 sum.max 和 min 聚合函数 6.1.1 聚合函数介绍 6.1.2 sum 函数 6.1.3 max/min 函数 6.2 a ...
- MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】
全部章节 >>>> 本章目录 4.1 select 选择列表 4.1.1 select 基本结构 4.1.2 选择列表 4.2 MySQL 运算符 4.2.1 MySQL ...
- 《MySQL数据操作与查询》- 综合项目 - 学生管理系统
<MySQL数据操作与查询>综合项目需求 一.系统整体功能 维护学生信息.老师信息和成绩信息. 支持按多种条件组合查询学生信息和成绩信息. 二.系统的信息需求 一个班级有一个讲师一个班主任 ...
- 《MySQL数据操作与查询》- 综合项目 - 航空售票系统
Mysql & SqlServer综合项目需求 1.系统整体功能 系统需支持以下功能: 维护客户信息.航班信息和票务信息 支持客户按多种条件组合查询航班信息和票务信息 支持客户根据票务信息订购 ...
随机推荐
- 容器之分类与各种测试(四)——unordered_set和unordered_map
关于set和map的区别前面已经说过,这里仅是用hashtable将其实现,所以不做过多说明,直接看程序 unordered_set #include<stdexcept> #includ ...
- java_IO总结(一)
所谓IO,也就是Input与Output的缩写.在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写 其他知识点将放置后续章节(我想,文章太长了,谁都没耐心翻到最后) 对于文件内容的操作 ...
- entfrm-boot开发平台一览【entfrm开源模块化无代码开发平台】
介绍 entfrm-boot是一个以模块化为核心的无代码开发平台,能够让中小企业快速从零搭建自己的开发平台:开箱即用,可插拔可自由组合:以模块化的方式,最大化的代码复用,避免重复开发:无代码可视化开发 ...
- 基于war的Spring Boot工程
一.简介 前面创建的Spring Boot工程最终被打为了Jar包,是以可执行文件的形式出现的,其使用了Spring Boot内嵌的Tomcat作为Web服务器来运行web应用的.新版Dubbo的监控 ...
- 【Python】CV2的一些基本操作
·导入: import cv2 ·读取图片: img = cv2.imread('路径') 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整 ...
- 【Matlab】abs不支持复整数
需要将uint8转换成double型数据才能计算 https://blog.csdn.net/lihe4151021/article/details/89372688 图像数据格式uint8与doub ...
- 【C/C++】二维数组的传参的方法/二维字符数组的声明,使用,输入,传参
[问题] 定义了一个子函数,传参的内容是一个二维数组 编译提示错误 因为多维数组作为形参传入时,必须声明除第一位维外的确定值,否则系统无法编译(算不出偏移地址) [二维数组的传参] 方法一:形参为二维 ...
- Libev——ev_timer 相对时间定时器
Libev中的超时监视器ev_timer,是简单的相对时间定时器,它会在给定的时间点触发超时事件,还可以在固定的时间间隔之后再次触发超时事件. 1.超时监视器ev_timer结构 typedef st ...
- Linux的命令行基础
1.对于全局配置文件和用户配置文件的认识 全局配置都存储在etc目录下,如/etc/profile文件,/etc/bashrc文件以及/etc/profile.d/目录下的.sh文件 用户配置都存储在 ...
- 追踪工具strace
目录 一.简介 二.例子 找出程序读取的文件 查看现在程序在做什么 查看程序中哪个部分消耗大量cpu 无法连接服务器查看信息 一.简介 Linux 操作系统有很多用来跟踪程序行为的工具,内核态的函数调 ...