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.系统整体功能 系统需支持以下功能: 维护客户信息.航班信息和票务信息 支持客户按多种条件组合查询航班信息和票务信息 支持客户根据票务信息订购 ...
随机推荐
- APK 反编译以及遇到的问题
APK反编译: https://www.cnblogs.com/geeksongs/p/10864200.html 遇到的问题 https://www.jianshu.com/p/55bf5f688e ...
- 【Linux】【Shell】【Basic】一行代码解决常见问题
1. 查看可用IP for i in `seq 1 255`; do ping -c 1 10.210.55.$i >> /dev/null; if [ $? -eq 1 ]; then ...
- maven内存溢出解决方法
maven内存溢出(InvocationTargetException: PermGen space) 解决方案:maven脚本:mvn.bat文件@REM set MAVEN_OPTS=-Xdebu ...
- CSS font-size: 0去除内联元素空白间隙
我们在编写HTML标签的时候,通常会使用换行,缩进来保证代码的可读性.同时,在编写CSS样式的时候,也会需要把一些元素设置为inline或inline-block.这样一来,有时在页面中会出现意外的空 ...
- spring基于注解的声明式事务控制
package com.hope.service.impl;import com.hope.dao.IAccountDao;import com.hope.domain.Account;import ...
- 使用cookie记录用户上次访问网页的时间,并返回到页面
package com.hopetesting.cookie;import javax.servlet.ServletException;import javax.servlet.annotation ...
- 【Xcode】sh: pause: command not found
system("pause"); 只适合于DOS和Windows系统,不适合Linux系统. 直接删掉就可以. 或者改为: #include <unistd.h> pa ...
- 你的Redis怎么持久化的
一.持久化套路 OK,一般我们在生产上采用的持久化策略为 (1)master关闭持久化 (2)slave开RDB即可,必要的时候AOF和RDB都开启 该策略能够适应绝大部分场景,绝大部分集群架构. 为 ...
- layout_weight属性分析
最近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个能够说的清楚的,于是自己结合网上资料研究了一下,终于迎刃而解,写出 ...
- 「Python实用秘技03」导出项目的极简环境依赖
本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第3期 ...