【剧前爆米花--爪哇岛寻宝】MySQL中索引和事务
作者:困了电视剧
专栏:《MySQL数据库》
文章分布:这是一篇关于Java中异常类的文章,在本篇文章中详细讲解了异常的使用逻辑和底层的执行过程,如有疏漏,欢迎大佬指正!
目录
索引
用法
底层逻辑
事务
并发执行事务可能产生的问题
脏读问题
不可重复读
幻读
索引
1.数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关 系。2.索引所起的作用类似书籍目录,可用于快速定位、检索数据。3.索引对于提高数据库的性能有很大的帮助。
用法
底层逻辑
当创建一个MySQL的索引,就是构建一个B+树,这个树中的元素就是数据库中存储的内容。
我们在了解B+树之前先了解什么是B树,B树又称B-树,是一个n叉搜素树,如图所示
此时我们发现如果数据库中的数据按这种方式进行排列的话,数据参差不齐很难找到我们需要的数据,此时就需要我们的B+树来进行安排了。
除了叶子节点,其他节点保留的仅仅是一个键值也就是用primary定义的key,然后最后一排的叶子节点中存储的才是每一个完整的数据,就比如如果是学生,那叶子节点以外的存储的是id编号,而叶子结点存储的则是每一个学生的姓名,班级等等。
B+数会使所有的数据都出现在叶子节点上,并且叶子节点都在同一个高度,这就使查找的时候效率大大增高。
事务
在生活中我们会遇到这样的问题,当我们再给别人转账的时候,如果我们转出500,在对方账户上进行转入500时发生了错误,那怎么办?我们的500块钱就会这样打水漂了嘛?
不会,为了解决这一问题,MySQL引入了事务这一概念。
事务的本质是将多个sql语句给打包成一个整体,要么全部执行成功,要么就一个都不执行,而不会出现执行一半这种中间状态。这体现了事务最核心的特性——原子性。
注:这里的一个都不执行是,并不是完全不执行,而是如果在执行一半时突然出错了,就停止执行,并将已经执行的部分给进行还原,所以看起来就好像没有执行过一样,这种方式叫做“回滚”。
事务的特性:
1.原子性——最核心的特性。
2.一致性,数据执行前后数据一定要是靠谱的,就比如转500,一个用户少了500,另一个用 户却多了5000,这就是不靠谱的数据。
3.持久性,事务修改的内容是写到硬盘上的,持久存在的,重启也不丢失。
4.隔离性,这个“隔离性”是为了解决“并发”执行事务,引起的问题。
并发执行事务可能产生的问题
脏读问题
在事务A对数据库中的数据进行修改的时候,如果此时事务B进来读了数据,那此时这个事务B读的数据就是脏数据,因为这个数据不是准确的,不确定事务A会不会在进行修改。
为了解决这一个问题,MySQL引入了“写操作加锁”这样的机制,即当事务A在对数据进行修改的时候,事务B不能进行读操作。
不可重复读
当事务A修改好后,此时事务B进行读操作,但当事务B进行读的过程中,事务A又来进行修改了,那事务B读的数据又不准确了。
于是MySQL引入了“读操作加锁”这个机制,是数据的准确性大大增加,提高了事务的隔离性,但同时事务的并发处理能力也下降了。
幻读
在引入读写加锁后,还可能会出现这样的问题,就是虽然我这一个文件在我读的时候不会发生改变了,但是我可能还有其他很多文件,这些个文件并没有上锁,所以当我一次性读完时,我发现我刚才读的那个没有改变但其他的却发生了变化,这在一些情况下是不允许的。
所以此时,MySQL使用“串行化”这样的方式来解决幻读,彻底放弃并发处理事务。
以上就是本篇博客的全部内容了,如有疏漏欢迎补充指正。
【剧前爆米花--爪哇岛寻宝】MySQL中索引和事务相关推荐
- 【剧前爆米花--爪哇岛寻宝】初识Java,了解Java代码的运行机制及JDK,JRE,JVM等
作者:困了电视剧 专栏:<JavaSE语法与底层详解> 文章分布:这是一篇知识点较为基础的文章,我会先将JavaSE相关的知识给罗列一遍,然后在后续的文章中会对其中重要的点再逐一进行底层剖 ...
- 【剧前爆米花--爪哇岛寻宝】运算符知识梳理
作者:困了电视剧 专栏:<JavaSE语法与底层详解> 文章分布:这是一篇知识点较为基础的文章,我会先将JavaSE相关的知识给罗列一遍,然后在后续的文章中会对其中重要的点再逐一进行底层剖 ...
- 【剧前爆米花--爪哇岛寻宝】常见的锁策略——乐观锁、读写锁、重量级锁、自旋锁、公平锁、可重入锁等
作者:困了电视剧 专栏:<JavaEE初阶> 文章分布:这是关于操作系统锁策略的文章,包括乐观锁.读写锁.重量级锁.自旋锁.公平锁.可重入锁等,希望对你有所帮助! 目录 乐观锁和悲观锁 悲 ...
- MySQL中索引与视图的用法与区别详解
索引与视图是我们在日常使用mysql必不可少的一部分,最近在学习中看到一本书中关于这方法写的不错,所以这篇文章主要给大家介绍了关于MySQL中索引与视图的使用与区别的相关资料,需要的朋友可以参考借鉴, ...
- 腾讯一面:说一说 MySQL 中索引的底层原理
一.前言 最近有很多读者要我出一些面试题的文章,一般我会给他一个老周整理的电子书,但有些读者反馈回来的面试题我觉得还是蛮经典的,而老周又在写系列的文章,本着对读者负责的态度,我会穿插写几篇我认为比较经 ...
- oracle repeatable read,Oracle和Mysql中的数据库事务有关问题:Mysql Read-Repeatable有有关问题...
Oracle和Mysql中的数据库事务问题:Mysql Read-Repeatable有问题 今天不知不觉想到数据库的乐观锁和悲观锁,遂想写个程序测测,却发现了另一个问题,Mysql InnoDB的R ...
- mysql中索引约束有哪些_Mysql中索引和约束的示例语句
外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCE ...
- mysql中索引创建 查看和删除语句_MySQL如何创建和删除索引?
mysql索引,mysql创建索引,mysql删除索引 1.在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快.今天就简单地给大家演示一下mysql中索引的创建,查 ...
- MySQL索引,MySQL中索引的限制?
MySQL中索引的限制: 1.MyISAM存储引擎引键的长度综合不能超过1000字节: 2.BLOB和TEXT类型的列只能创建前缀索引: 3.MySQL目前不支持函数索引: 4.使用!= 或者< ...
最新文章
- 微众WeCross 跨链平台(11)系统总结
- 新装的oracle缺少很多文件夹,丢失所有文件、拥有全备份,缺少后增加的文件
- 电量模块MODBUS RTU寄存器解读
- laravel 框架中使用数据库迁移添加注释
- python按日期排序_你如何在python中获得按创建日期排序的目录列表?
- Rxjs merge 学习笔记
- Genymotion模拟器拖入文件报An error occured while deploying the file的错误
- IIS6架设网站常见问题及症状答疑
- 为何控件删除不了_NBA开出800万合同,易建联为何却主动解约了?湖人太没诚意了...
- etl构建数据仓库五步法_构建数据仓库五步法
- 如何使用idea自带的数据库可视化工具
- ccf---导弹防御系统
- lambda分组集合中list和set区别
- Python中sorted()排序与字母大小写的问题
- ant-design-vue中自定义a-tree的打开与折叠图标
- xcode打包mac桌面程序
- 变位词算法C语言,第二章 啊哈!算法(变位词)
- PHP CURL请求慢的原因
- MOV AX,BX 与 MOV AX,[BX] 区别
- python整钱兑换零钱_LeetCode 零钱兑换
热门文章
- mac APP软件是32位还是64位
- php教程徽章,PHP-有什么想法可以改善我的徽章系统?
- java 判断 linux_您好,请教一下linux怎样确定jdk是否安装成功?
- 提高班-培养“狼”一样的学生
- 【有利可图网】PS实战教程24:制作一张,高点击率淘宝动效海报!
- 带有对话的整人html,一些搞笑的整人小段子,两个人对话的那种
- 2022年吉林二级建造师公路工程《路基工程》综合复习题及答案
- Python 爬虫云验证码识别
- 递归计算Ackermenn函数 (10分)
- matplotlib之绘制折线图、条形图、直方图