type
status
date
slug
summary
tags
category
icon
password
notion image

1.1 现有的数据存储方式有哪些?

Java程序存储数据(变量、对象、数组、集合),数据保存在内存中,属于瞬时状态存储。文件(File)存储数据,保存在硬盘上,属于持久状态存储。

1.2 以上存储方式存在哪些缺点?

没有数据类型的区分。存储数据量级较小。没有访问安全限制。没有备份、恢复机制。

二、数据库


2.1 概念

数据库是“按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。

2.2 数据库的分类

网状结构数据库:美国通用电气公司IDS(Integrated Data Store),以节点形式存储和访问。层次结构数据库:IBM公司IMS(Information Management System)定向有序的树状结构实现存储和访问。关系结构数据库:Oracle、DB2、MySQL、SQL Server,以表格(Table)存储,多表间建立关联关系,通过分类、合并、连接、选取等运算实现访问。非关系型数据库:ElastecSearch、MongoDB、Redis,多数使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据。

三、数据库管理系统


3.1 概念

数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。

3.2 常见数据库管理系统

Oracle:被认为是业界目前比较成功的关系型数据库管理系统。Oracle数据库可以运行在UNIX、Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。DB2:IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。SQL Server:Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。SQLLite:应用在手机端的数据库。

四、MySQL


4.1 简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。

4.2 访问与下载

官方网站:https://www.mysql.com/
notion image
下载页面

notion image
003

4.3 安装

运行mysql-installer-community-5.7.28.0.msi,进入安装步骤
同意协议,点击下一步

notion image
004

选择安装类型,点击下一步

notion image
005

注意:安装需要依赖环境,如需安装的功能缺少对应环境,需先安装环境

notion image
006

下一步的时候会提示缺少环境,此处的提示是说你期望安装的产品中缺少依赖,不一定提示的是数据库服务器安装的依赖,可能是其他功能组件的依赖缺少

notion image
007

此处发现没有 mysql server, 说明它对应的依赖缺少,可以先执行安装这些可以安装的,之后安装完依赖后再重新安装其他模块,我们此处的操作是先安装依赖,然后后退再次安装

notion image
008

下载安装前面提示的 mysql server 需要的 vc2013后,vc2013 如果在64位系统上面建议32和64的程序都安装,然后在上图的地方后退,重新 next 就可以看到可以安装 mysql server 了

notion image
009

检查是否存在失败项

notion image
010

进行第一步配置,除了需要设置密码外,后面的步骤基本上都是下一步

notion image
011

类型与网络配置

notion image
012

设置 root 密码

notion image
013

创建SQL服务与窗口

notion image
014

插件

notion image
015

应用配置

notion image
016

finish 后回到当前页面继续配置

notion image
017

连接服务器(先 check检查, 后下一步)

notion image
018

执行完此步骤 下一步 finish 配置完成

notion image
019

4.4 卸载

控制台卸载。找到mysql的安装目录进行删除。programdata 删除mysql

4.5 配置环境变量

Windows创建MYSQL_HOME:C:\Program Files\MySQL\MySQL Server 5.7追加PATH:%MYSQL_HOME%\bin;MacOS / Linux终端中输入cd ~ 进入目录,并检查.bash_profile是否存在,有则追加,无则创建创建文件 touch .bash_profile打开文件 open .bash_profile输入export PATH=${PATH}:/usr/local/mysql/bin 保存并退出终端

4.6 MySQL目录结构

核心文件介绍
文件夹名称
内容
bin
命令文件
lib
库文件
include
头文件
Share
字符集、语言等信息

4.7 MySQL配置文件

在MySQL安装目录中找到my.ini文件,并打开my.ini文件查看几个常用配置参数
参数
描述
default-character-set
客户端默认字符集
character-set-server
服务器端默认字符集
port
客户端和服务器端的端口号
default-storage-engine
MySQL默认存储引擎 INNODB

五、SQL语言


5.1 概念

SQL(Structured Query Language)结构化查询语言,用于存取数据、更新、查询和管理关系数据库系统的程序设计语言。

5.2 MySQL应用

对于数据库的操作,需要在进入MySQL环境下进行指令输入,并在一句指令的末尾使用 ; 结束

5.3 基本命令

查看MySQL中所有数据库
数据库名称
描述
information_schema
信息数据库,其中保存着关于所有数据库的信息(元数据)。 元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。
mysql
核心数据库,主要负责存储数据库的用户、权限设置、关键字等, 以及需要使用的控制和管理信息,不可以删除。
performance_schema
性能优化的数据库,MySQL 5.5版本中新增的一个性能优化的引擎。
sys
系统数据库,MySQL5.7版本中新增的可以快速的了解元数据信息的系统库 便于发现数据库的多样信息,解决性能瓶颈问题。
创建自定义数据库
查看数据库创建信息
修改数据库
删除数据库
查看当前所使用的数据库
使用数据库

六、客户端工具


6.1 Navicate

Navicat是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。

6.2 SQLyog

MySQL可能是世界上最流行的开源数据库引擎,但是使用基于文本的工具和配置文件可能很难进行管理。SQLyog提供了完整的图形界面,即使初学者也可以轻松使用MySQL的强大功能。其拥有广泛的预定义工具和查询、友好的视觉界面、类似 Excel 的查询结果编辑界面等优点。

七、数据查询【重点


7.1 数据库表的基本结构

关系结构数据库是以表格(Table)进行数据存储,表格由“行”和“列”组成

7.2 基本查询

语法:SELECT 列名 FROM 表名
关键字
描述
SELECT
指定要查询的列
FROM
指定要查询的表

7.2.1 查询部分列

7.2.2 查询所有列

7.2.3 对列中的数据进行运算

算数运算符
描述
+
两列做加法运算
-
两列做减法运算
*
两列做乘法运算
/
两列做除法运算

7.2.4 列的别名

列 as ‘列名’

7.2.5 查询结果去重

DISTINCT 列名

7.3排序查询

语法: SELECT 列名 FROM 表名 [ORDER BY 排序列 排序规则]
排序规则
描述
ASC
对前面排序列做升序排序
DESC
对前面排序列做降序排序

7.3.1 依据单列排序

7.3.2 依据多列排序

7.4 条件查询

语法:SELECT 列名 FROM 表名 WHERE 条件
关键字
描述
WHERE 条件
在查询结果中,筛选符合条件的查询结果,条件为布尔表达式

7.4.1 等值判断(=)

7.4.2 逻辑判断(and、or、not)

7.4.3 不等值判断(> 、< 、>= 、<= 、!= 、<>)

7.4.4 区间判断(between and)

7.4.5 NULL 值判断(IS NULL、IS NOT NULL)

IS NULL列名 IS NULLIS NOT NULL列名 IS NOT NULL

7.4.6 枚举查询( IN (值 1,值 2,值 3 ) )

7.4.7 模糊查询

LIKE _ (单个任意字符)列名 LIKE ‘张_’LIKE %(任意长度的任意字符)列名 LIKE ‘张%’

7.4.8 分支结构查询

7.5 时间查询

语法:SELECT [时间函数(参数列表])
时间函数
描述
SYSDATE()
当前系统时间(日、月、年、时、分、秒)
CURDATE()
获取当前日期
CURTIME()
获取当前时间
WEEK(DATE)
获取指定日期为一年中的第几周
YEAR(DATE)
获取指定日期的年份
HOUR(TIME)
获取指定时间的小时值
MINUTE(TIME)
获取时间的分钟值
DATEDIFF(DATE1,DATE2)
获取DATE1 和 DATE2 之间相隔的天数
ADDDATE(DATE,N)
计算DATE 加上 N 天后的日期

7.5.1 获得当前系统时间

7.6 字符串查询

语法: SELECT [字符串函数 (参数列表])
字符串函数
说明
CONCAT(str1,str2,str…)
将 多个字符串连接
INSERT(str,pos,len,newStr)
将str 中指定 pos 位置开始 len 长度的内容替换为 newStr
LOWER(str)
将指定字符串转换为小写
UPPER(str)
将指定字符串转换为大写
SUBSTRING(str,num,len)
将str 字符串指定num位置开始截取 len 个内容

7.6.1 字符串应用

7.7 聚合函数

语法:SELECT 聚合函数(列名) FROM 表名;
聚合函数
说明
SUM()
求所有行中单列结果的总和
AVG()
平均值
MAX()
最大值
MIN()
最小值
COUNT()
求总行数

7.7.1 单列总和

7.7.2 单列平均值

7.7.3 单列最大值

7.7.4 单列最小值

7.7.5 总行数

7.8 分组查询

语法:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组依据(列);
关键字
说明
GROUP BY
分组依据,必须在 WHERE 之后生效

7.8.1 查询各部门的总人数

7.8.2 查询各部门的平均工资

7.8.3 查询各个部门、各个岗位的人数

7.8.4 常见问题

7.9 分组过滤查询

语法:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组列 HAVING 过滤规则
关键字
说明
HAVING 过滤规则
过滤规则定义对分组后的数据进行过滤

7.9.1 统计部门的最高工资

7.10 限定查询

SELECT 列名 FROM 表名 LIMIT 起始行,查询行数
关键字
说明
LIMIT offset_start,row_count
限定查询结果的起始行和总行数

7.10.1 查询前 5 行记录

7.10.2 查询范围记录

7.10.3 LIMIT典型应用

分页查询:一页显示 10 条,一共查询三页

7.11 查询总结


7.11.1 SQL 语句编写顺序

SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组 HAVING 过滤条件 ORDER BY 排序列(asc|desc)LIMIT 起始行,总条数

7.11.2 SQL 语句执行顺序

7.12 子查询(作为条件判断)

SELECT 列名 FROM 表名 Where 条件 (子查询结果)

7.12.1 查询工资大于Bruce 的员工信息

7.13 子查询(作为枚举查询条件)

SELECT 列名 FROM 表名 Where 列名 in(子查询结果);

7.13.1 查询与名为’King’同一部门的员工信息

7.13.2 工资高于60部门所有人的信息

7.14 子查询(作为一张表)

SELECT 列名 FROM(子查询的结果集)WHERE 条件;

7.14.1 查询员工表中工资排名前 5 名的员工信息

7.15 合并查询(了解)

SELECT * FROM 表名 1 UNION SELECT * FROM 表名 2SELECT * FROM 表名 1 UNION ALL SELECT * FROM 表名 2

7.15.1 合并两张表的结果(去除重复记录)

7.15.2 合并两张表的结果(保留重复记录)

7.16 表连接查询

SELECT 列名 FROM 表 1 连接方式 表 2 ON 连接条件

7.16.1 内连接查询(INNER JOIN ON)

7.16.2 三表连接查询

7.16.3 左外连接(LEFT JOIN ON)

7.16.4 右外连接(RIGHT JOIN ON)

八、 DML 操作【重点


8.1 新增(INSERT)

INSERT INTO 表名(列 1,列 2,列 3…) VALUES(值 1,值 2,值 3…);

8.1.1 添加一条信息

8.2 修改(UPDATE)

UPDATE 表名 SET 列 1=新值 1 ,列 2 = 新值 2,…WHERE 条件;

8.2.1 修改一条信息

8.3 删除(DELETE)

DELETE FROM 表名 WHERE 条件;

8.3.1 删除一条信息

8.4 清空整表数据(TRUNCATE)

TRUNCATE TABLE 表名;

8.4.1 清空整张表

九、数据表操作


9.1 数据类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。对于我们约束数据的类型有很大的帮助

9.1.1 数值类型

类型
大小
范围(有符号)
范围(无符号)
用途
4 字节
(-2 147 483 648,2 147 483 647)
(0,4 294 967 295)
大整数值
DOUBLE
8 字节
(-1.797E+308,-2.22E-308)
(0,2.22E-308,1.797E+308)
双精度浮点数值
8个字节,M表示长度,D表示小数位数
同上,受M和D的约束 DOUBLE(5,2) -999.99-999.99
同上,受M和D的约束
双精度浮点数值
DECIMAL(M,D)
依赖于M和D的值,M最大值为65
依赖于M和D的值,M最大值为65
小数值

9.1.2 日期类型

类型
大小
范围
格式
用途
3
1000-01-01/9999-12-31
YYYY-MM-DD
日期值
TIME
3
‘-838:59:59’/‘838:59:59’
HH:MM:SS
时间值或持续时间
YEAR
1
1901/2155
YYYY
年份值
8
1000-01-01 00:00:00/9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
混合日期和时间值
TIMESTAMP
4
1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
YYYYMMDD HHMMSS
混合日期和时间值,时间戳

9.1.3 字符串类型

类型
大小
用途
0-255字符
定长字符串 char(10) 10个字符
0-65535 字节
变长字符串 varchar(10) 10个字符
BLOB(binary large object)
0-65535字节
二进制形式的长文本数据
0-65535字节
长文本数据

9.2 数据表的创建(CREATE)

CREATE TABLE 表名(
[列名 数据类型 约束],
[列名 数据类型 约束],
[列名 数据类型 约束] //最后一列的末尾不加逗号
[)charset=utf8] //可根据需要指定表的字符编码集

9.2.1 创建表

列名
数据类型
说明
subjectId
INT
课程编号
subjectName
VARCHAR(20)
课程名称
subjectHours
INT
课程时长

9.3 数据表的修改(ALTER)

ALTER TABLE 表名 操作;

9.3.1 向现有表中添加列

9.3.2 修改表中的列

9.3.3 删除表中的列

9.3.4 修改列名

9.3.5 修改表名

9.4 数据表的删除(DROP)

DROP TABLE 表名

9.4.1 删除学生表

十、约束


问题:在往已创建表中新增数据时,可不可以新增两行相同列值得数据?如果可行,会有什么弊端?

10.1 实体完整性约束

表中的一行数据代表一个实体(entity),实体完整性的作用即是标识每一行数据不重复、实体唯一。

10.1.1 主键约束

PRIMARY KEY 唯一,标识表中的一行数据,此列的值不可重复,且不能为 NULL

10.1.2 唯一约束

UNIQUE 唯一,标识表中的一行数据,不可重复,可以为 NULL

10.1.3 自动增长列

AUTO_INCREMENT 自动增长,给主键数值列添加自动增长。从 1 开始,每次加 1。不能单独使用,和主键配合。

10.2 域完整性约束

限制列的单元格的数据正确性。

10.2.1 非空约束

NOT NULL 非空,此列必须有值。

10.2.2 默认值约束

DEFAULT 值 为列赋予默认值,当新增数据不指定值时,书写DEFAULT,以指定的默认值进行填充。

10.2.3 引用完整性约束

语法:CONSTRAINT 引用名 FOREIGN KEY(列名) REFERENCES 被引用表名(列名)详解:FOREIGN KEY 引用外部表的某个列的值,新增数据时,约束此列的值必须是引用表中存在的值。

10.3 约束创建整合

创建带有约束的表。

10.3.1 创建表

列名
数据类型
约束
说明
GradeId
INT
主键、自动增长
班级编号
GradeName
VARCHAR(20)
唯一、非空
班级名称
列名
数据类型
约束
说明
student_id
VARCHAR(50)
主键
学号
Student_name
VARCHAR(50)
非空
姓名
sex
CHAR(2)
默认填充’男’
性别
borndate
DATE
非空
生日
phone
VARCHAR(11)
电话
GradeId
INT
非空,外键约束:引用班级表的 gradeid。
班级编号

十一、事务【重点


11.1 模拟转账

生活当中转账是转账方账户扣钱,收账方账户加钱。我们用数据库操作来模拟现实转账。

11.1.1 数据库模拟转账

11.1.2 模拟转账错误

11.2 事务的概念

事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

11.3 事务的边界

开始:连接到数据库,执行一条DML语句。 上一个事务结束后,又输入了一条DML语句,即事务的开始结束: 1). 提交: a. 显示提交:commit; b. 隐式提交:一条创建、删除的语句,正常退出(客户端退出连接); 2). 回滚: a. 显示回滚:rollback; b. 隐式回滚:非正常退出(断电、宕机),执行了创建、删除的语句,但是失败了,会为这个无效的语句执行回滚。

11.4 事务的原理

数据库会为每一个客户端都维护一个空间独立的缓存区(回滚段),一个事务中所有的增删改语句的执行结果都会缓存在回滚段中,只有当事务中所有SQL 语句均正常结束(commit),才会将回滚段中的数据同步到数据库。否则无论因为哪种原因失败,整个事务将回滚(rollback)。

11.5 事务的特性

Atomicity(原子性)
表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败
表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态
事务查看数据操作时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
持久性事务完成之后,它对于系统的影响是永久性的。

11.6 事务应用

应用环境:基于增删改语句的操作结果(均返回操作后受影响的行数),可通过程序逻辑手动控制事务提交或回滚

11.6.1 事务完成转账

十二、权限管理


12.1 创建用户

CREATE USER 用户名 IDENTIFIED BY 密码

12.1.1 创建一个用户

12.2 授权

GRANT ALL ON 数据库.表 TO 用户名;

12.2.1 用户授权

12.3 撤销权限

REVOKE ALL ON 数据库.表名 FROM 用户名

12.3.1 撤销用户权限

12.4 删除用户

DROP USER 用户名

12.4.1 删除用户

十三、视图


13.1 概念

视图,虚拟表,从一个表或多个表中查询出来的表,作用和真实表一样,包含一系列带有行和列的数据。视图中,用户可以使用SELECT语句查询数据,也可以使用INSERT,UPDATE,DELETE修改记录,视图可以使用户操作方便,并保障数据库系统安全。

13.2 视图特点

优点简单化,数据所见即所得。安全性,用户只能查询或修改他们所能见到得到的数据。逻辑独立性,可以屏蔽真实表结构变化带来的影响。缺点性能相对较差,简单的查询也会变得稍显复杂。修改不方便,特变是复杂的聚合视图基本无法修改。

13.3 视图的创建

语法:CREATE VIEW 视图名 AS 查询数据源表语句;

13.3.1 创建视图

13.3.2 使用视图

13.4 视图的修改

方式一:CREATE OR REPLACE VIEW 视图名 AS 查询语句方式二:ALTER VIEW 视图名 AS 查询语句

13.4.1 修改视图

13.5 视图的删除

DROP VIEW 视图名

13.5.1 删除视图

13.6 视图的注意事项

注意:视图不会独立存储数据,原表发生改变,视图也发生改变。没有优化任何查询性能。如果视图包含以下结构中的一种,则视图不可更新聚合函数的结果DISTINCT 去重后的结果GROUP BY 分组后的结果HAVING 筛选过滤后的结果UNION、UNION ALL 联合后的结果

十四、SQL 语言分类


14.1 SQL语言分类

数据查询语言DQL(Data Query Language):select、where、order by、group by、having 。数据定义语言DDL(Data Definition Language):create、alter、drop。数据操作语言DML(Data Manipulation Language):insert、update、delete 。事务处理语言TPL(Transaction Process Language):commit、rollback 。数据控制语言DCL(Data Control Language):grant、revoke。

十五、综合练习


15.1 数据库表

15.2 综合练习1-【多表查询】

15.2.1 查询所有用户的订单

15.2.2 查询用户id为 1 的所有订单详情

15.3 综合练习2-【子查询】

15.3.1 查看用户为张三的订单

15.3.2 查询出订单的价格大于800的所有用户信息。

15.4 综合练习3-【分页查询】

15.4.1 查询所有订单信息,每页显示5条数据

RedisMybatis
IT小舟
IT小舟
微信公众号:IT小舟
公告
type
status
date
slug
summary
tags
category
icon
password
notion image
你好,我是小舟。 欢迎来到我的博客,我喜欢运动、阅读、音乐和写作。如果有什么想要交流的,可以加我微信:upcodezhou。再次感谢你的光临!
notion image