mysql事务
储存方式
内存储存的缺点:易失性。比如数组、集合
数据库的好处:
-
持久化数据到本地
-
可以实现结构化的查询、方便管理
DB:
数据库(database):储存数据的“仓库”。他保存了一系列有组织的数据。
DBMS:
数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的容器
sql:
结构化查询语言:专门用来与数据库通信的语言
常见的数据库管理系统 :mysql、oracle、DB2、SqlServer
mysql
安装目录my.ini端口,引擎等
Mysql常见命令
-
查看当前所有的数据库
show databases
-
打开指定的库
use 库名
-
查看当前库的所有表
show tables
-
查看其他库的所有表
show tables form 库名;
-
查看表结构
desc 表名
DQL语言的学习
基础查询
IFNULL:可以判断数据为空的时候
-
条件查询
-
% 任意多个字符
-
_ 任意单个字符
-
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n53" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">BETWEEN AND -- 介于某两者之间,包括临界
IN -- 判断某字段的值是否属于in列表中的某一项
IS NULL -- 值为空的字段,=或者<>不能判断null</pre>
常见函数
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n55" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">-- 一、字符函数
1、length 获取参数值的字节个数
2、concat 拼接字符串
3、upper/lower 变大/小写
4、substr/substring 截取
5、instr 返回子串在第一个位置的索引
6、trim 去掉前后中的相同的单位
7、lpad 用指定的字符实现左填充填充指定的长度
8、rpad 用指定的字符实现右填充填充指定的长度
9、replace 替换</pre>
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n56" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">-- 二、数学函数
1、round 四舍五入,默认取整 允许小组点保留N位
2、ceil 向上取整,返回大于等于该参数的最小整数
3、floor 向下取整,返回小于等于改参数的最大整数
4、truncate 截断
5、mod 取余</pre>
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n57" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">-- 三、日期函数
1、now 返回当前系统日期+时间
2、curdate 返回当前系统日期,不包括时间
3、curtime 返回当前的时间,不包含日期
4、str_to_date 将日期格式的字符转换成指定成指定格式的日期
5、date_faormat 将日期转化为字符</pre>
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n58" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">-- 四、流程控制函数
1、if函数
2、case函数
case 要判断的字段或者表达式/可以为空
when 常量1 then 要显示的值1或者语句1;
when 常量2 then 要显示的值2或者语句2;
else 要显示的值n或者语句n
end</pre>
分组函数
用作统计使用,又称为聚合函数或统计函数或组函数
分类:
sum 求和、avg 平均值、max 最大值、count 计算个数
分组查询
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n65" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">/*
语法:
select 分组函数,列(要求出现在group by的后面)
form 表
【where 筛选条件】
group by 分组的列表
【order by 子句】
*/</pre>
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n66" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">HAVING 子句用来从分组的结果中筛选行</pre>
连接查询
- 分类
* 内连接 inner * 等值连接 * 非等值连接 * 自连接 * 外连接 * 左外连接 * 右外连接 * 全外连接 * 交叉连接
笛卡尔乘积现象:表1 有m行,表2 有n行,结果有m*n行的现象
事务的ACID属性
-
原子性(Atomicity)
- 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
-
一致性
- 事务必须使数据库从一个一致性状态变换到另外一个一致性状态
-
隔离性
- 事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。
-
持久性
- 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响
隐式事务:
事务没有明显的开启和结束的标记
比如 insert、 update、 delete
显式事务:
步骤1:开启事务
set autocommit = 0;
start transaction;可选的
步骤2:编写事务中的sql语句
…….
步骤3:结束事务
commit;提交事务
rollback;回滚事务
脏读
对于两个事务,T1读取了T2更新了但是<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">还没有提交</mark>的字段,然后T2进行回滚,T1读取的内容就是临时且无效的。
不可重复读
T1读取了一个字段,然后T2<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">更新</mark>了改字段,之后T1再次读取同一个字段
幻读
T1从一个表中读取了一个字段,然后T2在该表中<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">插入</mark>了一些新的行,之后,T1再次读取用一个表
SAVEPOINT
SAVEPOINT设置保存点,配合ROLLBACK TO 回滚到保存点
储存引擎
image-20210713212828720索引
MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构。
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构就是索引。
索引分类
-
单值索引
- 即一个索引只包含单个列,一个表可以有多个单列索引
-
唯一索引
- 索引列的值必须唯一,但允许有空值
-
复合索引
- 一个索引包含多个列
Explain
哪些情况下需要创建索引
-
主键自动建立索引
-
频繁作为查询条件的字段应该创建索引
-
查询中与其他表关联的字段、外键关系建立索引
-
频繁更新的字段不适合创建索引
-
where条件里用不到的字段不创建索引
-
单键/组合索引的选择问题(在高并发下倾向创建组合索引)
-
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
-
查询中统计或者分组字段
哪些情况不需要创建索引
-
表数据太少
-
经常增删改的表
-
数据重复且分布平均的表字段
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
│—————-└ Vector 接口实现类 数组, 同步, 线程安全
│ ———————-└ Stack 是Vector类的实现类 └——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序 └ —————-TreeSet 底层实现为二叉树,元素排好序