🗒️javaWeb2
00 分钟
2023-12-8
2023-12-8
type
status
date
slug
summary
tags
category
icon
password

数据库

MySQL下载安装

一、下载

notion image
点击Download 就可以下载对应的安装包了, 安装包如下:

二、解压

下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到MySQL 8.0.31 的软件本体了(就是一个文件夹),我们可以把它放在你想安装的位置 。
notion image
三、配置

1. 添加环境变量

环境变量里面有很多选项,这里我们只用到Path这个参数。为什么在初始化的开始要添加环境变量呢?
在黑框(即CMD)中输入一个可执行程序的名字,Windows会先在环境变量中的Path所指的路径中寻找一遍,如果找到了就直接执行,没找到就在当前工作目录找,如果还没找到,就报错。我们添加环境变量的目的就是能够在任意一个黑框直接调用MySQL中的相关程序而不用总是修改工作目录,大大简化了操作。
右键此电脑属性,点击高级系统设置
notion image
点击环境变量
notion image
系统变量中新建MYSQL_HOME
notion image
系统变量中找到并双击Path
notion image
点击新建
notion image
最后点击确定。
如何验证是否添加成功?
右键开始菜单(就是屏幕左下角),选择命令提示符(管理员),打开黑框,敲入mysql,回车。
notion image
如果提示Can't connect to MySQL server on 'localhost'则证明添加成功;
notion image
如果提示mysql不是内部或外部命令,也不是可运行的程序或批处理文件则表示添加添加失败,请重新检查步骤并重试。

2. 初始化MySQL

==以管理员身份,运行命令行窗口:==
notion image
在刚才的命令行中,输入如下的指令:
notion image
稍微等待一会,如果出现没有出现报错信息,则证明data目录初始化没有问题,此时再查看MySQL目录下已经有data目录生成。
tips:如果出现如下错误
notion image
是由于权限不足导致的,以管理员方式运行 cmd
notion image

3. 注册MySQL服务

命令行(注意必须以管理员身份启动)中,输入如下的指令,回车执行:
notion image
现在你的计算机上已经安装好了MySQL服务了。

4. 启动MySQL服务

在黑框里敲入net start mysql,回车。
notion image

5. 修改默认账户密码

在黑框里敲入mysqladmin -u root password 1234,这里的1234就是指默认管理员(即root账户)的密码,可以自行修改成你喜欢的。
notion image

四、登录MySQL

右键开始菜单,选择命令提示符,打开黑框。 在黑框中输入,mysql -uroot -p1234,回车,出现下图且左下角为mysql>,则登录成功。
notion image
到这里你就可以开始你的MySQL之旅了!
退出mysql:
登陆参数:

五、卸载MySQL

如果你想卸载MySQL,也很简单。
点击开始菜单,输入cmd,选择 "命令提示符",选择右侧的 "以管理员身份运行"。
notion image
  1. 敲入net stop mysql,回车。
notion image
  1. 再敲入mysqld -remove mysql,回车。
notion image
  1. 最后删除MySQL目录及相关的环境变量。
至此,MySQL卸载完成!

MySQL数据模型

关系型数据库

notion image

数据模型

notion image
在命令行登录数据库
notion image
然后创建一个数据库,指令
notion image
数据库在data目录下可以查看
notion image
在db01的库名下创建对象,就是上面表的形式

SQL简介

SQL通用语法

notion image

SQL分类

notion image

DDL(数据库操作)

notion image

MySQL客户端工具

打开IDEA
notion image
notion image
notion image
成功,点ok
notion image
展示所有数据库
notion image
具体用法
notion image
notion image
notion image

数据类型

整数 字节 有符号 无符号 描述
tinyint 1byte signed(-128,127) unsigned(0,255) 小整数值(常用)
smallint 2byte signed(-32768,32767) unsigned(0,65535) 大整数值
mediumint 3byte signed(-8388608,8388607) unsigned(0,16777215) 大整数值
int 4byte signed(-2147483648,2147483647) unsigned(0,4294967295) 大整数值
bigint 8byte signed(-2^63,2^63-1) unsigned((0,2^64-1)) 极大整数值
小数
float 4byte 单精度浮点数值 float(5,2):5表示整个数字长度,2 表示小数位个数 ——000.00
double 8byte 双精度浮点数值 double(5,2):5表示整个数字长度,2 表示小数位个数——000.00
decimal 小数值(精度更高) decimal(5,2):5表示整个数字长度,2 表示小数位个数(不常用)
字符串
char bytes(0-255) 定长字符串 char(10):最多10个字符,不足10个字符,占10个字符 (性能高,浪费空间)
varchar byte(0-65535) 变长字符串 varchar(10):最多10个字符,不足10个字符,按实际长度存储(性能低,节省空间)
时间 范围 格式 描述
date 3byte (1000-01-01至9999-12-31) YYYY-MM-DD 日期值
time 3byte (-838:59:59至838:59:59) HH:MM:SS 时间值或持续时间
year 1 1901至2155 YYYY 年份值
datetime 8byte YYYY-MM-DD HH:MM:SS 日期和时间混合

表创建

notion image
[ ]可以写也可以不写
notion image
创建约束
notion image
notion image

表查询

查询当前数据库所有表
notion image
查询表结构
notion image
查询建表语句
notion image
保存表,直接保存建表代码就可以了,表删了,执行一次建表代码就可以恢复,数据没有了

表修改

图形化界面操作
修改表名
notion image
添加字段,删除字段,修改字段名和类型
notion image

表删除

notion image
注意:删除表,表中的全部数据也会被删除

DML(数据操作语言)

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。

增加字段数据

notion image
notion image
数据之间用逗号分开
notion image
数据之间用逗号分开
notion image
注意事项:
插入数据时,指定的字段顺序需要与值的顺序是一一对应的。 字符串和日期型数据应该包含在引号中。 插入的数据大小,应该在字段的规定范围内

更新字段数据

notion image
notion image
notion image
where修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

删除字段数据

notion image
notion image
notion image
delete 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。 delete 语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。
小结
notion image

DQL(数据查询语句)

notion image

基本查询

notion image
notion image
notion image
notion image

条件查询

notion image
notion image
notion image

分组查询

notion image
notion image
notion image
notion image
notion image
notion image

排序查询

notion image
notion image

分页查询

notion image
notion image

案例

notion image
notion image
小结
notion image

多表设计

一对多

notion image
notion image
notion image
notion image
notion image
通过外键来关联
notion image
notion image
notion image
有个蓝钥匙就是有了
也可以用语法来关联
notion image
这里是我已经加过了dept_id了,所以只能加dept_id1,因为没有dept_id1表,所以只供参考语法关联外键,这是建完表后的语法

一对一

notion image
notion image
notion image
一一对应,通过物理外键绑定id,一一对应,就可以实现一对一的关系

多对多

notion image
通过一个关系表可以把学生和课程关联起来,表中的元素分布绑定学生id和课程id,通过查找学生就可以知道学生选了什么课,通过查找课程也可以知道什么学生选了课

多表查询

notion image
notion image

内外连接

notion image
notion image
notion image
notion image

子查询

notion image

标量子查询

notion image
notion image

列子查询

notion image
notion image

行子查询

notion image
notion image

表子查询

notion image
notion image

练习

notion image
notion image

事务

notion image
notion image
notion image
删除部门和删除部门下的员工同时进行,如果有一个执行失败,则不能执行提交,而是执行回滚,若都成功了,就可以执行提交,执行状态可以通过查看表来观看,只能在控制台输入观看,在图像化界面是看不到的
notion image

索引

notion image
notion image
notion image
notion image
notion image
也就是说主键字段一般是ID和加了unique约束的字段都会默认的有索引
notion image
上面是默认的
notion image
这里是为name创建索引

小结

notion image

Mybtis

使用Mybatis查询所有用户数据

在数据库输入
查看是否可以正常输出信息
notion image
在IDEA中创建Spring Initializr,类型是Maven
notion image
这里要加入两个配置SQL下的MyBatis Framework和MySQL Driver
notion image
在专门放数据的包下创建对象,数据库的表里有什么,这里的对象就要有什么
notion image
还要配置一下无参带参构造方法,各个属性的get和set方法,还有toString方法
在resources包下的application.properties文件里加入配置信息
notion image
在专门接口的包下创建接口,代码如图
notion image
在test测试接口中,对数据库的数据进行读取输出
notion image
notion image

配置SQL提示

notion image
notion image
notion image
notion image

JDBC介绍

notion image
notion image
Mybatis
notion image
主要掌握这两点就可以了
notion image
小结
notion image

数据库连接池

notion image
没有连接池是用户访问一次数据库就要创建一个连接,等用户用完了,连接就取消了,耗时多,浪费资源
有连接池,一次性创建多个连接,当用户需要时,从连接池里获取,当用户用完了,连接回到连接池,供下一个用户使用,当连接没有操作的时间大于系统设置的闲置时间,连接会被自动回收
notion image
后面两个是现在企业常用的
notion image
加入德鲁伊数据库连接池的依赖,然后再运行就可以了
小结
notion image

lombok

notion image
notion image
notion image
用lombok还要安装一个插件(IDEA自带,不用安装)
notion image

基础操作

删除

notion image
notion image
notion image

日志输出

notion image
notion image
notion image
性能更高是因为对于参数变化只需要把前面相同的代码只需编译一次,原始的MySQL流程是整句代码经过解析、优化、编译三个步骤后缓存起来,第二个句子和第一个句子不一样,无法直接用缓存的数据,就只能再次做3个步骤,但是用SQL预编译就可以只做一次3个步骤,所以性能更高了

SQL注入

SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。
像通常的账号密码都是用String类型存储的,SQL注入就是利用了这一点,把字符串拼接起来,像在密码字符串里拼接'or true',这样就无论什么账号都可以登录平台了
利用预编译可以有效的防止SQL注入,预编译是把你输入的账号和密码都分别作为String类型输入到平台中,而不是通过拼接的方式,也就是说平台的代码不会和账号密码同时运行,是分开运行的,通过拼接的方式就是平台代码和账号密码同时运行才会导致'or true'的有效
notion image
#{...}就是预编译的用法,把你的参数名称放进里面,编译时参数会变成?,在后面再进行参数的传递
notion image
${...}这个有SQL注入的风险,因为这个是参数拼接在一起同时运行的
notion image
小结:
notion image

新增

notion image
notion image
notion image
由于有多个参数值,所以用Emp类把参数值封装起来
notion image
在代码输入时#{Emp类的对应参数名}
test测试
notion image
结果是数据库emp表增加了Tom的信息

主键返回(没有成功)

在EmpMapper类的代码中加一句
notion image
test测试
notion image
按照视频来走,不知道为什么数据是上传了,但是有报错,而且没有返回数据给我

更新

notion image
在EmpMapper类加入SQL语句
notion image
在test测试
notion image
结果是id为22的数据更改

查询

notion image
在EmpMapper类加入SQL语句,也叫接口方法
notion image
test测试
notion image
结果是得到id为22的数据,但是有一些没有数据
notion image
notion image
解决办法
之前的查询语句要注释掉,在EmpMapper类中
notion image
notion image
第三种方案,在resources包下的application.properties中加入
notion image
之后用回最开始的代码,有一个前提是数据库用下划线命名,而java中用驼峰命名
notion image
三种方案都快解决部分数据为null的情况
小结
notion image

条件查询

notion image
在EmpMapper类中,因为要进行模糊匹配,所以要用到' ',而#{}不能用在' '中,但是${}可以
notion image
test测试,这种方式有SQL注入风险
notion image
notion image
可以用,这样可以解决SQL注入的问题
notion image
notion image

XML映射文件

notion image
notion image
notion image
在resources包下创建一个Directory包,包的命名和上面类的包名一样,不要用点来分隔,用/来分隔,创建出来的是一级一级的文件夹,而不是只有一个文件夹
notion image
创建一个新的文件
notion image
名字和类名相同,后缀为xml
notion image
在文件里加入配置文件
notion image
notion image
notion image
notion image
notion image
在EmpMapper类里本来的查询代码注释掉,只留下方法语句
notion image
再次test测试,结果和之前的一样
必须要严格按照XML映射的规范来才可以找到你要执行的SQL语句
按装一个插件
notion image
更好的管理XML映射文件
推荐是较复杂的SQL语句用XML映射,简单的增删改查就直接用注释语句。
小结
notion image

动态SQL

随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。

if

当用户只输入用户名时进行查询,而没有输入其他信息,或是输入了其他信息来查询,显然之前的代码写死了,要所有信息来查询,所有就有了动态查询
XML映射文件中,通过if标签来判定用户是否输入,若输入则添加这个信息搜索,在这个过程中可能会多出来and和where这个语句,所以可以用where标签来解决这个问题,当有语句时就会有where,没有语句就没有where,当有拼接信息时就有and,没有拼接就没有and
notion image
test测试可以根据你的输入信息进行不同的查询
notion image
原来的更新当你更新部分数据时,其他的数据就会都是null
notion image
解决
动态更新员工信息,如果更新时传递有值,则更新;如果更新时没有传递值,则不更新。
在EmpMapper类中
notion image
在EmpMapper.xml中,可以鼠标放到方法名后按alt+回车,自动跳转,里面是sql语句,用if加工了,这里踩了坑,是Emp封装类的参数非空,而不是数据表的
<set>:动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中),set是防止有多余的逗号,效果和where标签一样
notion image
notion image
test测试
notion image
这样输入的数据修改了,没有输入的数据的就不变
小结
notion image

foreach

notion image
notion image
EmpMapper类中
notion image
notion image
notion image
EmpMapper.xml中
notion image
test测试
notion image
id为13,14,15的数据删除了

SQL片段

notion image
像select所有数据表中的项,这就需要打很多代码,而且我们不推荐使用select*来代替,当你在多处用到select所有数据表中的项时,你要修改其中一项,那么就需要找到全部用到的来修改,所以考虑到这点,把select所有数据表中的项封装起来就好了,每处用到直接调用即可,修改只需修改一次就可以了,而封装就需要用到<sql>标签,调用需要用到<include>标签
封装代码,最好放到有效范围的最上面
notion image
调用代码
notion image

数据库看报错

找到最后一个Caused by
notion image
拉到这个的最后找到near
notion image
错误的地方就在那里

案例——tlias智能学习辅助系统

notion image
notion image
notion image
notion image
notion image
notion image
notion image
DeptController类发生请求到DeptService接口,再传到DeptMapper接口,再传到DeptServiceImpl类,DeptServiceImpl类返回数据到DeptController类,DeptController类返回数据给网页
notion image
notion image
notion image
notion image
notion image
notion image
上一篇
Linux基础
下一篇
javaWeb1