玄子Share-BCSP助学手册之数据库开发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2YJCOSKa-1680280127185)(./assets/XuanZiShare_QQ_3336392096.jpg)]

玄子Share-BCSP助学手册之数据库开发

前言:

此文为玄子,学习 BCSP 一二期后整理的文章,文中对知识点的解释仅为个人理解,源码均可直接复制运行

配套PPT,站点源码,等学习资料请加文章封面联系方式

针对课程的一些调整:

  1. 一期 C sharp语言和SQLServer数据库技术与二期JAVA开发之JAVA数据库编程这两本书的相似度较高,所以针对数据库编程,只写了二期的JAVA开发之JAVA数据库编程
  2. 这篇文章和之前的玄子Share-BCSP助学手册之JAVA开发以及玄子Share-BCSP助学手册之前端开发属于同一系列玄子Share-BCSP助学手册之Java数据库编程这本书,几乎就是以后工作的日常操作,所以这篇文章,会加入更多关于我对数据库及JDBC的理解,相对前两篇文章,会比较啰嗦,请谅解。
  3. 部分章节的知识点会有相对应的增改,以课本为准
  4. ……

目录

文章目录

一、课程软件的安装与卸载

1.1 MySQL 版本选择与安装方式

Mysql

1.1.1 MySQL 版本选择

按照教材上的要求,统一使用MySQL版本号为5.7.40的版本

1.1.2 MySQL 安装方式

MySQL 的安装方式有两种

  1. 安装器直接安装
  2. 压缩包配置安装

安装器安装,快速便捷,安装过程均为图像操作界面,但缺点是卸载,极其麻烦,不仅要删除MySQL文件,还要删除注册表,等相关信息。如果卸载不干净,影响以后的安装配置等。

压缩包安装,相对比较麻烦,需要解压后,自行配置MySQL服务等,但优点是,卸载非常简单,只需要把解压文件删除即可。

我推荐使用,压缩包解压配置的方式安装MySQL,虽然麻烦了一点,但后期使用MySQL出现问题,需要重新安装MySQL就会很舒服。

两种安装方式我都写有教程,不用纠结使用哪种安装方式,能安装上就行了。


1.2 MySQL 压缩包安装教程

1.2.1 下载链接

官方 https://downloads.mysql.com/archives/community/

度盘 https://pan.baidu.com/s/1fuGdLIDXx2-2b5mEdqEh3g?pwd=xzsr

1.2.2 安装 MySQL

注意选择版本号为5.7.40

下载完后我们会得到一个以 MySQL 开头命名的压缩包,我们需要把这个压缩包解压到本地

这里可以把 MySQL 文件名后面的-winx64删除掉(度盘下载的压缩包我已经删除过了)

推荐将文件解压到 C 盘的 Program Files 文件下,即解压路径为C:\Program Files\mysql-5.7.40

1.2.3 添加配置文件

C:\Program Files\mysql-5.7.40文件夹内新建一个文本文档,【强制】命名为:my.ini

注意开启显示文件拓展名设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yI16F8pt-1680280127188)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230202161947.png)]

如果在度盘下载的压缩包,我在压缩包中已经写入过my.ini文件,只需要注意自己的安装路径是否和配置文件内路径一致即可

使用记事本方法打开my.ini文件,将下面的配置文件粘贴进去

[mysqld]
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=C:\Program Files\mysql-5.7.40
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files\mysql-5.7.40\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#跳过密码
skip-grant-tables

basedir:就是mysql的安装路径

datadir:只需要把\data前面的路径替换即可

文本里的代码前面是没有数字的

1.2.4 配置环境变量

  1. 右键此电脑
  2. 属性
  3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUJYqgzW-1680280127188)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330224010.png)]
  4. 高级系统设置
  5. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UzOIV09T-1680280127189)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330224026.png)]
  6. 环境变量
  7. 下方系统变量,找到Path双击进入
  8. 新建系统变量,变量值为 mysql 安装bin目录(实际路径以自己安装时设置为准)
  9. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CaHIirN6-1680280127189)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330224206.png)]
C:\Program Files\mysql-5.7.40\bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DvPNj2ip-1680280127189)(./assets/image-20230202162835333.png)]

  1. 配置好后,保存退出
  2. 按下Win + R然后通过管理员身份打开cmd
  3. 输入mysql --version查看环境是否配置成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iu9pX4bx-1680280127190)(./assets/image-20230202163232310.png)]

1.2.5 安装 MySQL 服务

  1. 按下键盘Win + R打开运行输入cmd以管理员身份运行
  2. cd 到 mysql 文件的 bin 目录中
cd /d C:\Program Files\mysql-5.7.40\bin
  1. 输入mysqld -install命令安装 MySQL 服务
  2. 继续输入mysqld --initialize-insecure初始化 data 目录
  3. 输入net start mysql启动 MySQL 服务
  4. 成功启动后,输入 mysql -uroot登录 MySQL
  5. 成功登录之后,输入下面代码
update mysql.user set authentication_string=password('root') where user='root' and Host = 'localhost';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4s1zrxLn-1680280127190)(./assets/image-20230202164124547.png)]

  1. 这里的root就是登录密码,账户名也是root或者你可以把密码改成自己喜欢的
  2. 再输入flush privileges;刷新一下权限
  3. 最后输入exit退出 MySQL 即可

1.2.6 删除配置文件代码

退出后回到my.ini配置文件中,用#注释掉或者直接删除掉最后一行代码skip-grant-tables然后保存退出

到这里就已经成功下载并配置好了 MySQL

1.2.7 验证 MySQL 配置

  1. 命令行先输入net stop mysql关闭 MySQL 服务

  2. 在输入net start mysql开启 MySQL 服务

  3. 这里报错的请自己到服务中手动打开 MySQL 服务后重新尝试

  4. 登录数据库

mysql -uroot -proot

mysql -u账户名 -p密码

注意密码前后不能有空格

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H8YycRlD-1680280127190)(./assets/image-20230202165147101.png)]

最后可以输入一个查询版本信息的SQl语句玩一下:select version(),user(); 代码后面有分号

1.2.8 完成下课

MySQL 压缩包安装教程


1.3 MySQL 安装器安装教程

1.3.1 下载链接

官方 https://downloads.mysql.com/archives/installer/

度盘 https://pan.baidu.com/s/1fuGdLIDXx2-2b5mEdqEh3g?pwd=xzsr

1.3.2 安装 MySQL

注意选择版本号为5.7.40

下载完后我们会得到一个以 MySQL 开头命名的msi安装器,直接双击运行安装

  1. 提示是否更新,点击NO即可
  2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2V7LMgYJ-1680280127191)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330223027.png)]
  3. 勾选下方Custom自定义安装
  4. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pCDrHW5S-1680280127191)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330223154.png)]
  5. 左边找到MySQL Server 5.7.40 - X64点击箭头添加到右边
  6. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gwv4mBxB-1680280127191)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330223349.png)]
  7. 点击Execute 执行安装即可
  8. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mygvXR75-1680280127191)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330223415.png)]
  9. 这个界面保持默认状态
  10. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7qsLm0oY-1680280127192)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330223532.png)]
  11. 设置MySQL登录密码(默认设置为 root)
  12. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UpFdbvAo-1680280127192)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330225947.png)]
  13. 这里的MySQL57就是服务器名称,点击Next下一步
  14. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vHpuS3Ih-1680280127192)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330223658.png)]
  15. 安装完毕
  16. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XkglNCXb-1680280127192)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330223754.png)]

1.3.3 配置环境变量

  1. 右键此电脑
  2. 属性
  3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DnbReg8G-1680280127193)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330224010.png)]
  4. 高级系统设置
  5. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vTHzlOzv-1680280127193)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330224026.png)]
  6. 环境变量
  7. 下方系统变量,找到Path双击进入
  8. 新建系统变量,变量值为 mysql 安装bin目录(实际路径以自己安装时设置为准)
  9. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nnDf3D9U-1680280127193)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330224206.png)]
C:\Program Files\MySQL\MySQL Server 5.7\bin
  1. 配置好后,保存退出
  2. 按下Win + R然后通过管理员身份打开cmd
  3. 输入mysql --version查看环境是否配置成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3Nov0LA-1680280127194)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330223945.png)]

1.3.4 验证 MySQL 配置

  1. 再次通过按下Win + R打开cmd窗口
  2. 输入账号密码mysql -uroot -proot(-u后的root为管理员账号,-p后的root为之前设置的MySQL登录密码,没有空格直接跟密码)
  3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CIZDFV5u-1680280127194)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330224416.png)]

最后可以输入一个查询版本信息的SQl语句玩一下:select version(),user(); 代码后面有分号

1.3.5 完成下课

MySQL 安装器安装教程


1.4 MySQL 卸载教程

1.4.1 压缩包卸载

压缩包安装方式安装的MySQL,卸载就直接删除掉解压后的MySQL文件夹即可,然后删除配置的 MySQL 环境变量

1.4.2 安装器卸载

  1. 按下Win + R打开cmd窗口输入services.msc打开服务
  2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4TfEYGFC-1680280127194)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330230901.png)]
  3. 找到MySQL停止服务
  4. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dLssQp7h-1680280127194)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330230926.png)]
  5. 打开控制面板
  6. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7riJOwxE-1680280127195)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330230617-1680189633074-23.png)]
  7. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-paTBoLmm-1680280127195)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330230629.png)]
  8. 这里的两个软件都要卸载掉
  9. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mTxF8ExN-1680280127195)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330230648.png)]

到这里只是卸载了MySQL软件,MySQL还有许多文件并没有删掉,如果不删除干净,会影响后续安装导致安装失败。

  1. 删除MySQL在电脑硬盘上物理位置上的所有文件
  2. C:\Program Files (x86)\MySQL内所有文件
  3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lSJETcAr-1680280127196)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330231218.png)]
  4. C:\ProgramData\MySQL内所有文件,该文件是默认隐藏的,设置显示后即可见
  5. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5FDNy3Ur-1680280127196)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330231312.png)]
  6. C:\Documents and Settings\All Users\Application Data\MySQL内所有文件
  7. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TGKclFkV-1680280127196)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330231346.png)]

到这里也只是删掉了MySQL所有残余文件,还需要删除MySQL的注册表信息

  1. 按下Win + R打开cmd窗口输入regedit打开注册表
  2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HB1r1NAX-1680280127197)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330231549.png)]
  3. 删除以下三项内所有信息(可直接粘贴至地址栏)
  4. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mixz6KmY-1680280127197)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330231609.png)]
  5. HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQL
  6. HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQL
  7. HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application/MySQL
  8. 到此MySQL算是彻底卸载完毕

1.5 MySQL管理工具安装

1.5.1 下载链接

Navicate官网 https://www.navicat.com/en/products

SqlYog官网 https://sqlyog.en.softonic.com/

度盘 https://pan.baidu.com/s/1fuGdLIDXx2-2b5mEdqEh3g?pwd=xzsr

1.5.2 Navicate 安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AJNJmcJd-1680280127197)(./assets/image-20230205154315466-1680219755644-4.png)]

Navicate 涉及版权无法分享,加封面联系方式获取软件

1.5.3 SqlYog 安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Ey2eTGF-1680280127197)(./assets/image-20230331164902240.png)]

SqlYog 涉及版权无法分享,加封面联系方式获取软件

1.5.4 PowerDesigner 安装

t01814cadb480e4610f

PowerDesigner 涉及版权无法分享,加封面联系方式获取软件


一、MySQL 数据库设计

1.1 为什么需要设计数据库

良好的数据库设计

  • 降低应用程序的开发难度
  • 具备高效的查询效率
  • 具备良好的扩展性

糟糕的数据库设计

  • 出现数据操作异常、修改复杂、数据冗余等问题
  • 影响程序的性能,甚至会导致程序崩溃

数据库设计是对数据库中实体以及这些实体之间的关系进行规划和结构化的过程,当数据库比较复杂时,需要设计数据库

1.1.1 软件项目开发周期中数据库设计

  • 需求分析阶段:分析客户的业务和数据处理需求
  • 概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整
  • 详细设计阶段:应用三大范式审核数据库结构
  • 代码实现阶段:物理实现数据库,编码实现应用
  • 软件测试阶段:……
  • 上线部署:……

1.1.2 设计数据库的步骤

收集信息

  • 通过对业务人员的访谈等方法,充分了解用户需求,理解数据库需要存储的业务信息(数据)及需要提供的操作

标识实体 (Entity)

  • 标识数据库要管理的关键对象或实体,实体一般是名词

标识每个实体的属性(Attribute)

标识实体之间的关系(Relationship)

数据库设计中,不能重复出现含义相同的实体


1.2 为什么使用 E-R 图

1.2.1 E-R 图概念

E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型

符号含义
实体,一般是名词
属性,一般是名词
关系,一般是动词

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-imINsCcx-1680280127198)(./assets/image-20230331234821123.png)]

  • E-R图表示映射关系时,也可以通过添加箭头区分一对多和多对一
  • 箭头指向映射关系为一的实体
  • 在业务人员与开发人员的沟通中,E-R图能够极大的提高彼此之间的沟通效率

1.3 数据库设计模型转换

1.3.1 关系型数据库设计分类

  • 概念数据模型设计

  • 逻辑数据模型设计

  • 物理数据模型设计

1.3.2 各模型之间的元素对应关系

概念数据模型逻辑数据模型物理数据模型
实体(Entity)实体(Entity)表(Table)
属性(Attribute)属性(Attribute)列(Column)
标识符(Identifier)标识符(Primary Identifier/ Foreign Identifier)键(Primary key/ Foreign key)
关系(Relationship)关系(Relationship)参照完整性约束(Reference)

1.3.3 数据模型转换方案

基本转换原理

  • 将E-R图中每一个实体转换成一个表,实体的属性转换为表的列,实体的标识符转换为表的主键

  • 将实体关系转化为表之间的引用完整性约束

    • 根据关系的不同类型,通过外键引用主键的方式有所不同

1.4 实体关系约束转换

1.4.1 一对多关系的两个实体

  • 一般会各自转换为一张表,且后者对应的表引用前者对应的表

  • 一个表中的主键对应另一个表中可重复的字段

    • 主键的值是不能重复的,关联的字段是可以重复的

    • 存在一个值对应一个值(一对一)或者一个值对应多个值(一对多)

1.4.2 一对一关系的两个实体

  • 一般是一个主键对应一个不可重复的字段

1.4.3 多对多关系的两个实体

  • 除了将多对多关系中的两个实体各自转换为表外,一般还会创建第3个表,称为连接表
    • 将多对多关系划分为两个一对多关系,将这两个表主键都插入到第3个表中

1.5 PowerDesigner 软件

t01814cadb480e4610f
  • Sybase 公司开发的一款强大的数据库设计软件
  • 开发人员经常使用的数据库建模工具
  • 能够使用设计好的数据库模型直接生成SQL建表语句
  • 极大的提升数据库的开发效率

推荐使用的版本:PowerDesigner 16.5

PowerDesigner 涉及版权无法分享,加封面联系方式获取软件

1.5.1 绘制数据库模型图

  • 创建物理数据模型
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8TAaTL73-1680280127198)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230331235814.png)]
  • 绘制模型图
  • 创建表实体
  • 添加属性
  • 添加实体之间的映射关系
  • 两个实体间连线,箭头指向主表
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3YMCRfkV-1680280127198)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401000646.png)]

1.5.2 生成 SQL代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t94KLglc-1680280127199)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401000958.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G6iUFg11-1680280127199)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401001019.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XsoeI8wX-1680280127199)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401001132.png)]

生成的 SQL文件可直接拿到 Navicate 运行

PowerDesigner中开发数据库模型图时,需要指定该模型图是为数据库管理系统开发的,因为PowerDesigner支持用数据库模型图生成数据库创建脚本的功能


1.6 数据库设计范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则

1.6.1 三大数据库设计范式

  1. 第一范式

    • 第一范式的目标是确保每列保持原子性
    • 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
  2. 第二范式

    • 第二范式的目标是确保表中的每列都和主键相关
    • 要求每个表只描述一件事情
  3. 第三范式

    • 第三范式的目标是确保每列都和主键列直接相关,而不是间接相关
    • 如果一个关系满足第二范式,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)

1.7 规范化和性能的关系

为满足某种商业目标,数据库性能比规范化数据库更重要

  • 通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间

  • 通过在给定的表中插入计算列(如成绩总分),以方便查询

  • 在数据规范化同时,要综合考虑数据库的性能

存放商品信息的表

商品名称商品型号单价数量金额
电视机29英寸250040100000

金额 = 单价 * 数量,是冗余的列

为了提高查询统计速度,以空间换取时间

不要轻易违反数据库设计的规范化原则,如果处理不好,可能会适得其反,使应用程序运行速度更慢


1.8 用三大范式设计表结构

1.8.1 实现思路

  1. 向各表中插入数据,查看表中的每个属性列是否存在重复、插入异常、更新异常和删除异常

  2. 对照三大范式的定义,解决表中的异常问题

  3. 第一范式的目标是确保每列都是不可再分的最小数据单元,查看每列是否都满足第一范式

  4. 第二范式的每列与主键相关,不相关的放入别的表中,即要求一个表只描述一件事情

  5. 第三范式要求表中各列必须和主键直接相关,不能间接相关,查看各表,满足第三范式,对于不满足三大范式的表要进行拆分


二、MySQL 基础

2.1 MySQL 简介

Mysql

MySQL 是一款流行的开源数据库,也是一个关系型数据库管理系统

在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一

2.1.1 MySQL 发展历史

时间里程碑
1996 年MySQL 1.0 发布。它的历史可以追溯到 1979 年,作者 Monty 用 BASIC 设计的一个报表工具
1996 年10 月 3.11.1 发布。MySQL 没有 2.x 版本
2000 年ISAM 升级成 MyISAM 引擎。MySQL 开源
2003 年MySQL 4.0 发布,集成 InnoDB 存储引擎
2005 年MySQL 5.0 版本发布,提供了视图、存储过程等功能
2008 年MySQL AB 公司被 Sun 公司收购,进入 Sun MySQL 时代
2009 年Oracle 收购 Sun 公司,进入 Oracle MySQL 时代
2010 年MySQL 5.5 发布,InnoDB 成为默认的存储引擎
2016 年MySQL 发布 8.0.0 版本

为什么没有 MySQL6、MySQL7?

MySQL5.6 可以当成 MySQL6.x

MySQL5.7 可以当成 MySQL7.x

2.1.2 MySQL 的优势

  • 运行速度快

  • 使用成本低

    • 价格:MySQL对多数个人来说是免费的
  • 容易使用

    • 与其他大型数据库的设置和管理相比,其复杂程度较低,容易学习
  • 可移植性强

    • 能够工作在众多不同的系统平台上,例如:Windows 、Linux、Unix、MacOS等
  • 适用用户广

  • 丰富的接口

    • 提供了用于C 、C++、Eiffel、Java、Perl、PHP、Python、Rudy和TCL 等语言的API
  • 支持查询语言

    • MySQL可以利用标准SQL语法和支持ODBC(开放式数据库连接)的应用程序
  • 安全性和连接性

    • 安全性和连接性; 十分灵活和安全的权限和密码系统,允许主机验证。连接到服务器时,所有的密码均采用加密形式,从而保证了密码安全

    • 并且由于MySQL是网络化的,因此可以在因特网网上的任何地方访问,提高数据共享效率

2.1.3 MySQL 安装教程

Mysql

官网 https://downloads.mysql.com/archives/community/

CSDN安装教程 https://blog.csdn.net/qq_62283694/article/details/129869634

安装教程见第一章、课程软件的安装与卸载


2.2 命令行连接 MySQL

  1. 首先检查 MySQL 服务是否启动

  2. 电脑按下Win + R 输入 cmd打开dos窗口

2.2.1 启动服务命令

net start mysql

2.2.2 停止服务命令

net stop mysql

2.2.3 登录数据库命令

mysql –h服务器主机地址 –u用户名 –p密码

参数说明:

-h 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略

-u 登录的用户名

-p 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RDlTYGXl-1680280127199)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205152901.png)]

2.2.4 查看当前版本和用户信息

SELECT VERSION(),USER();

分号为结束符,不可缺

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xkIwS8ti-1680280127200)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205152928.png)]

2.3 数据库管理指令

2.3.1 创建数据库

CREATE DATABASE 数据库名;

Query OK:SQL语句执行成功

1 row affected:操作影响的行数

(0.00 sec):操作执行时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0hijvVO-1680280127200)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205153046.png)]

2.3.2 查看数据库列表

SHOW databases;

student:用户数据库

其他的是系统数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nUGDOB1h-1680280127200)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205153258.png)]

2.3.3 选择数据库

USE 数据库名;

使用数据表前,必须先选择该数据库!

ERROR 1049 (42000): Unknown database 'a'

数据库不存在,报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqD4JKEX-1680280127201)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205153925.png)]

2.3.4 删除数据库

DROP DATABASE 数据库名;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-23TckjwS-1680280127201)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205154227.png)]


2.4 Navicat 数据库管理工具

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UjuG8Dia-1680280127201)(./assets/image-20230205154315466-1680219755644-4.png)]

Navicat Premium是一款功能强大的、可支持多连接的数据库管理工具

允许在单一程序中同时连接多达7种数据库

  1. MySQL

  2. MariaDB

  3. MongoDB

  4. SQL Server

  5. SQLite

  6. Oracle

  7. PostgreSQL

2.4.1 安装教程

官网 https://www.navicat.com/en/products

推荐使用:Navicat Premium 16 最新版

Navicate 涉及版权无法分享,加封面联系方式获取软件

2.4.2 Navicat 连接 MySQL

搜狗截图20230205154753

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4E5LTDzz-1680280127202)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205154815-1680247296828-4.png)]

2.4.3 使用 Navicat 创建数据库

  1. 通过操作向导创建数据库
搜狗截图20230205160037

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5FUMbDH-1680280127202)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205160159-1680247296828-6.png)]

  • 字符集要选择utf8点击 SQL 预览可以查看建表语句

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fY2ZejZR-1680280127203)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205160210-1680247296828-7.png)]

  1. 通过SQL语句创建数据库
搜狗截图20230205155234

2.5 结构化查询语言

名称解释命令举例
DML (数据操作语言)操作数据库中所包含的数据INSERT UPDATE DELETE
DDL (数据定义语言)创建和删除数据库对象等操作CREATE DROP ALTER
DQL (数据查询语言)对数据库中的数据进行查询SELECT
DCL (数据控制语言)控制数据库组件的存取许可、存取权限等GRANT COMMIT ROLLBACK

2.6 MySQL 数据类型

MySQL 中定义数据字段的类型对你数据库的优化是非常重要的

MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型

2.6.1 数值类型

类型说明取值范围存储需求
TINYINT非常小的数据有符值:-27~27-1
无符号值:0~28-1
1字节
SMALLINT较小的数据有符值:-215~215-1
无符号值:0~216-1
2字节
MEDIUMINT中等大小的数据有符值:-223~223-1
无符号值:0~224-1
3字节
INT标准整数有符值:-231~231-1
无符号值:0~232-1
4字节
BIGINT较大的整数有符值:-263~263-1
无符号值:0~264-1
8字节
FLOAT单精度浮点数±1.1754351e-384字节
DOUBLE双精度浮点数±2.2250738585072014e-3088字节
DECIMAL字符串形式的浮点数Decimal(M,D)M+2个字节

**UNSIGNED 属性:**标识为无符号数,非负数

**ZEROFILL 属性:**宽度(位数)不足以0填充

搜狗截图20230205163743

若某数值字段指定了 ZEROFILL 属性,将自动添加 UNSIGNED 属性

搜狗截图20230205163822

数值位数小于宽度,以0填充

数值位数大于宽度,显示实际位数

2.6.2 日期类型

日期类型格式取值范围用途
DATEYYYY-MM-DD1000-01-01 / 9999-12-31日期值
TIMEHH:MM:SS-835:59:59 / 838:59:59时间值或持续时间
YEARYYYY1901~2155年份值
DATETIMEYYYY-MM-DD hh:mm:ss1000-01-01 00:00:00 到 9999-12-31 23:59:59混合日期和时间值
TIMESTAMPYYYY-MM-DD hh:mm:ss‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
混合日期和时间值,时间戳

若某日期字段默认值为系统当前日期,可指定为TIMESTAMP类型

2.6.3 字符串

字符串类型大小用途
CHAR[(M)]0-255 bytes定长字符串
VARCHAR[(M)]0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

char(m) 和 varchar(m) 中括号中 m 代表字符的个数,并不代表字节个数

比如 CHAR(30) 就可以存储 30 个字符

  • CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换

  • BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值

  • BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同

  • 有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择


2.7 MySQL 创建数据表

创建MySQL数据表需要以下信息

  • 表名
  • 表字段名
  • 定义每个表字段

2.7.1 创建 MySQL 表语法

CREATE TABLE table_name (column_name column_type);
CREATE TABLE [IF NOT EXISTS] 表名 (
    字段 1 数据类型 [ 字段属性 | 约束 ][ 索引 ][ 字段备注 ],
    字段 2 数据类型 [ 字段属性 | 约束 ][ 索引 ][ 字段备注 ],
    字段 n 数据类型 [ 字段属性 | 约束 ][ 索引 ][ 字段备注 ]
)[ 表类型 ][ 表字符集 ][ 表备注 ];

IF NOT EXISTS 判断表是否存在,存在就不重复建表了

多字段使用逗号分隔,保留字用撇号括起来

2.7.2 演示案例

CREATE TABLE IF NOT EXISTS xuanzi(
   id INT UNSIGNED AUTO_INCREMENT,
   name VARCHAR(100) NOT NULL,
   phone VARCHAR(40) NOT NULL,
   date DATE,
   PRIMARY KEY ( id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 如果你不想字段为NULL可以设置字段的属性为NOT NULL,在操作数据库时如果输入该字段的数据为NULL,就会报错
  • AUTO_INCREMENT 定义列为自增的属性,一般用于主键,数值会自动加1
  • PRIMARY KEY 关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔
  • ENGINE 设置存储引擎,CHARSET 设置编码

2.8 MySQL 注释

#  单行注释
-- 单行注释

/** 
	多行注释
*/

2.9 MySQL 字段的约束及属性

名称关键字说明
主键约束PRIMARY KEY(PK)设置该字段为表的主键 可唯一标识该表记录
外键约束FOREIGN KEY(FK)用于在两表之间建立关系, 需要指定引用主表的哪一字段
自动增长AUTO_INCREMENT设置该列为自增字段 默认每条自增1 通常用于设置主键
非空约束NOT NULL字段不允许为空
默认约束DEFAULT赋予某字段默认值
唯一约束UNIQUE KEY(UK)设置字段的值是唯一的 允许为空,但只能有一个空值

2.9.1 主键约束

主键:使用数据库表中某一字段或某几个字段唯一标识所有记录

  • 单字段主键
CREATE TABLE [IF NOT EXISTS] 表名 (
    字段 1 数据类型 PRIMARY KEY,
    #……
);
-- 定义字段的同时指定主键
CREATE TABLE [IF NOT EXISTS] 表名 (
    字段 1 数据类型 ,
    #……
    [CONSTRAINT< 约束名 >] PRIMARY KEY[ 列名 ]
);
-- 定义所有字段之后指定主键
  • 多字段联合主键
CREATE TABLE [IF NOT EXISTS] 表名 (
    #……
    PRIMARY KEY [字段1,字段2,…… ]
);

2.10 MySQL 注释与字符集编码

2.10.1 注释

  • COMMENT关键字

  • 在表结构中可以看到,与代码注释不同、

CREATE TABLE test (
    id int(11) UNSIGNED COMMENT '编号'
)COMMENT='测试表';

2.10.2 设置字符集编码

  • 默认情况下,MySQL所有数据库、表、字段等使用 MySQL 默认字符集

  • 为了存储独特的数据,可在创建表时指定字符集

CREATE TABLE [IF NOT EXISTS] 表名(
     #……
)CHARSET = 字符集名;

2.10.3 演示案例

CREATE TABLE `checkitem`  (
  `checkItemID` int(4) NOT NULL AUTO_INCREMENT COMMENT '检查项目编号',
  `checkItemName` varchar(50) NOT NULL COMMENT '检查项目名称',
  `checkItemCost` float NOT NULL COMMENT '检查项目价格',
  PRIMARY KEY (`checkItemID`) USING BTREE
) ENGINE = InnoDB  CHARACTER SET = utf8  COMMENT = '检查项目表';

2.11 MySQL 查看表

2.11.1 查看数据库中的表

SHOW TABLES;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yb2uIKHr-1680280127203)(./assets/image-20230331173945642.png)]

2.11.2 描述表结构

DESCRIBE 表名;
DESC 表名;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pSOVZXgO-1680280127204)(./assets/image-20230331173500098.png)]

为了避免DOS窗口出现中文乱码,可执行SET NAMES gbk;


2.12 MySQL 删除表

2.12.1 删除表

DROP TABLE [IF  EXISTS] 表名;

在删除表之前,先使用IF EXISTS语句验证表是否存在,执行 DROP TABLE 的表是空表,则可以直接删除

如果表中已存储了业务数据,则需和数据库管理员联系,先对数据库数据进行备份并确认,再执行删除表及数据的操作


2.13 MySQL 的存储引擎

存储引擎,是存储数据的核心组件,指定了表的存储类型和存储形式

2.13.1 存储引擎的类型

  • InnoDB
  • MyISAM
  • Memory
  • CSV
  • 等9种

2.13.2 查看系统所支持的存储引擎类型

SHOW ENGINES;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VanLV7x4-1680280127204)(./assets/image-20230331232103064.png)]

2.13.3 常用的MySQL存储引擎

InnoDB存储引擎

  • 支持具有提交、回滚和崩溃恢复能力的事务控制

MyISAM存储引擎

  • 不支持事务,也不支持外键约束,访问速度比较快

2.13.4 InnoDB 和 MyISAM 存储引擎比较

功能InnoDBMyISAM
事务处理支持不支持
外键约束支持不支持
表空间大小较大较小
数据行锁定支持不支持

2.13.5 适用场合

  • 使用 MyISAM:不需事务,空间小,以查询访问为主
  • 使用InnoDB:多删除、更新操作,安全性高,事务处理及并发控制

2.13.6 设置默认存储引擎

MySQL 5.7 版本默认的存储引擎是InnoDB

  • 查看当前默认存储引擎
SHOW VARIABLES LIKE 'default_storage_engine%';
-- default_storage_engine% 默认存储引擎

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmaPu9M9-1680280127204)(./assets/image-20230331232525679.png)]

2.13.7 修改存储引擎

  • 修改my.ini配置文件
default-storage-engine=MyISAM
-- MyISAM 改为其他类型的存储引擎

修改配置文件后,需要重启MySQL服务设置才会生效

2.13.8 设置表的存储引擎

数据表默认使用当前 MySQL 默认的存储引擎

创建表时,可以设置表的存储引擎类型

CREATE TABLE 表名 (
# ……
) ENGINE= 存储引擎 ;

2.13.8 演示案例

CREATE TABLE `checkitem`  (
  `checkItemID` int(4) NOT NULL AUTO_INCREMENT COMMENT '检查项目编号',
  `checkItemName` varchar(50) NOT NULL COMMENT '检查项目名称',
  `checkItemCost` float NOT NULL COMMENT '检查项目价格',
  PRIMARY KEY (`checkItemID`) USING BTREE
) ENGINE = MyISAM;

2.13.9 数据表的存储位置

MyISAM 类型表文件

  • *.frm表结构定义文件

  • *.MYD数据文件

  • *.MYI索引文件

uInnoDB 类型表文件

  • *.frm表结构定义文件

  • ibdata1文件

2.13.10 存储位置

因操作系统而异,可查my.ini

datadir="C:\ProgramData\MySQL\MySQL Server 5.7\Data"
innodb_data_home_dir="D:/MySQL Datafiles/"

2.14 MySQL 系统帮助

 HELP 查询内容;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EGgbV2BA-1680280127204)(./assets/image-20230331233452271.png)]

HELP contents;
#查看帮助文档目录列表
HELP Data Definition;
#查看数据定义
HELP CREATE DATABASE;
#查看CREATE DATABASE的帮助信息

玄子Share-BCSP助学手册之数据库开发

加粗样式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值