本篇会加入个人的所谓鱼式疯言
❤️❤️❤️鱼式疯言
:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言
,帮助大家理解的.
🤭🤭🤭可能说的不是那么严谨
.但小编初心是能让更多人能接受我们这个概念
!!!
前言
在上一篇MySQL数据库的文章中,我们提及HR喜欢考的 一个话题 就是:索引
。
我们讲解了
- 索引是什么?
索引就是相当于书本的一种特殊的
目录
, 对于特定的索引列
的查询能够加快查询的速度
- 索引的使用特点
- 像
主键
,unique
,外键
会自带索引, 但不能通过 SQL 删除这些索引。
我们也可以通过 SQL
来创建 自身的索引 ,并且删除 自己创建 的索引
- 索引的不足
- 创建索引会占用 额外的内存空间
- 索引可能会加快,减慢,数据库的
增删改
操作的速度 。
- 索引底层的数据结构
- 底层是一颗 N叉的B+ 搜索树
- B+ 的
特点
- B+ 树的
优势
关于这些小伙伴们可以移步 HR眷恋的数据库高频考题之一 —— 索引 文章中。
而本篇文章中
我们核心讲解事务的概念和它最核心的四个特性
目录
-
事务的初识
-
事务的四大核心特性
-
隔离性需要解决的三大问题
-
不同隔离级别的特点
一. 事务的初始
在提及事务,和小伙伴们分享个场景
假如 甲同学的数据库下 有 1000
元
乙同学的数据库下有 500
元
现在甲同学向乙同学买东西,需要转账 500
给他, 那么我们的数据库是怎么操作的?
就需要先将甲同学的 SQL语句 1
: 数据库先减去 500
然后再执行乙同学的 SQL语句 2
: 数据库加上 500 。
这样就完成了转账 😁 😁 😁
但是,但是,但是,难免有时候会有意外发生的,当我们执行完 SQL语句 1 的时候,突然程序崩了或者主机断电了 ,SQL 语句 2
就被 终止执行 了 , 那么最终的结果就变成了 甲同学 500
, 乙同学500
这样的问题产生 。
那么这样的问题该怎么解决呢 🤔 🤔 🤔 🤔 。
于是我们就必须要借助事务的特性来解决上述问题 💥 💥 💥 💥
1. 事务的简介
对于上面的问题,我们要解决该问题的方法就是
把上面的 两条语句 都打包成 一个整体
, 要不两条语句都执行,要不两条语句都不执行 。 这样的话我们就 不会
出现上述的问题 。
但
注意哦
,这里的 一条语句都不执行 ,不是真不执行 ,而是出现上述这样的问题时, 假如我们只执行了语句一
, 而执行不了语句二
, 数据库自身就会把 前面执行过 的所有语句都 还原,撤销回去 ,就好像之前的语句都 没有执行过一样 。
而像这样我们把所有语句都当成
一个整体
时, 成功执行所有语句 ,或者执行了 一部分语句 ,出现问题时会 自动还原 ,相当于 一条语句都没有执行 的特性 我们就称之为 事务
而我们把这种 自动还原的特性 称之为 回归机制
。
2. 回滚机制的本质
对于回滚机制
本质
我们知道数据库是一种
客户端-服务器结构
的程序 , 我们平常的数据
都在存储到硬盘
上,但还有一个特殊的机制
,叫做 日志机制
当我们
执行事务
时,回滚日志 就会记录
你每一次使用 SQL语句 对 数据的影响 , 而这些 日志记录 都会存储到某个特定的文件
中
当我们主机出现
程序崩溃
时, 我们回滚日志保留了前面SQL语句执行
的过程,当下次程序恢复正常时,就会 回撤这些执行 的语句,还原成