当前位置:网站首页>MySQL基础知识
MySQL基础知识
2022-04-23 14:08:00 【白马非马·】
0. 基础知识
- 关系型数据库:MySQL
数据库中存储的数据之间是有联系(一对一,一对多和多对一)
1. 索引(采用B和B+树)
1.1 索引可供选择的数据结构
快速查询和检索数据的数据结构,常见的有B树,B+树和Hash
-
Hash表进行索引:
1)优点:快
2)缺点:Hash冲突问题,Hash索引不支持顺序和范围查询。 -
B+树:多路平衡查找树
1)区别:B树所有节点既存放键,也存放数据;B+树只有叶子节点存放键和数据,其他节点只存放键。
2)数据都存放在叶子节点中,查找的数据少。 -
B-树:
-
AVL树:平衡二叉树
1)所有节点子树的高度差不超过一,超过会进行旋转操作
2)为什么不用红黑树进行索引?
树的深度过大过大,而导致磁盘IO读写过于频繁。 -
红黑树:自平衡二叉查找树,弱平衡二叉树
1)为什么不用红黑树进行索引。
红黑树往往出现由于树的深度过大过大,而导致磁盘IO读写过于频繁。 -
红黑树与AVL树的区别:
红黑树的 查询性能略微逊色于AVL树,因为他比avl树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的avl树最多多一次比较,但是,红黑树在插入和删除上完爆avl树, avl树每次插入删除会进行大量的平衡度计算,而红黑树为了维持红黑性质所做的红黑变换和旋转的开销,相较于avl树为了维持平衡的 开销要小得多
1.2 索引的类型
- 索引类型
1)主键索引(聚集索引):索引结构和数据存放在一起
2)二级索引(辅助索引,非聚集索引)索引结构和数据不存放在一起。
2. 事务
- 事务:是逻辑上的一组操作,要么都执行,要么都不执行
- 数据库事务:保证多个对数据库的操作构成一个逻辑上的整体,要么全部执行成功,要么全部不执行
//开启一个事务
START TRANSACTION
SQL1,SQL2
//提交事务
COMMIT
-
关系型数据库的事务四大特性:
1)原子性:事务是最小的执行单位,不允许分割
2)隔离性:并发访问数据库,一个用户的事务不会被其他事务所干扰
3)持久性:一个事务被提交,对数据库的改变是持久的。
4)一致性:执行事务前后,数据保持一致(转账,钱没少) 【前三个保证了,最后一个才能保证】 -
事务四大特性的实现原理:
1)原子性:undo log(回滚日志)
2)持久性:redo log(重做日志)
3)隔离性:锁机制,MVCC保证。
4)一致性:前三者满足,自然保证。 -
并发事务带来的问题:
1)脏读:一个事务进行数据库修改,还没有提交,另一个事务进行访问,多得到的数据是脏数据。
2)丢失修改:两个事务同时对一个数据进行修改,那么第一个事务修改的数据不会被保存。
3)不可重复读(修改):一个事务多次读取数据库的一个数据,在两次读取数据之间,发生了另一个事务对数据的修改,导致第一个事务读到的两个数据不一致,那么成为不可重复读。
4)幻读(新增或者删除):和不可重复读类似,就是一个事务在读取数据库内容时,另一个事务对该数据库进行插入操作,使得第二次第一个事务读到的数据多了,像发生了幻觉。 -
事务隔离的级别:
1)读取未提交
2)读取已提交
3)可重复读
4)可串行化:(最理想) -
MySQL的默认隔离级别是:可重复读。
3. 存储引擎
存储引擎:如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。决定数据库提供的功能和性能。
主流的存储引擎有两种:MylSAM 和InnoDB(事务性数据库)。
- 两个存储引擎的对比
1)是否支持行级锁
2)是否支持事务
3)是否支持外键是否支持数据库异常崩溃后的安全恢复
4)是否支持MVCC(行级锁的一个升级)
4. 锁机制
-
MylSAM 和InnoDB存储引擎采用的锁
1)MylSAM:表级锁,一锁,直接把一张表给锁住
2)InnoDB支持行级锁和表级锁,默认为行级锁 -
行级锁和表级锁区别:
1)表级锁:粒度最大一种锁,对当前操作的整张表加锁。(无死锁)
2)行级锁:粒度最小的一种锁,只针对当前操作的行进行加锁(死锁) -
Inno存储引擎的锁算法三种
1)Record lock: 记录锁
2)Gap lock:间隙锁,锁定一个范围,不包括记录本身
3)Next-key lock:临建锁
参考文章:
链接:http://www.zhihu.com/question/43744788/answer/98258881
版权声明
本文为[白马非马·]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_42974034/article/details/124146653
边栏推荐
- 多云数据流转?云上容灾?年前最后的价值内容分享
- Wechat applet communicates with low-power Bluetooth - receives data sent by hardware (IV)
- 帆软中单元格中隔行变色以及数量大于100字体变大变红设置
- squid代理
- 如何快速批量创建文本文档?
- 线程间控制之CountDownLatch和CyclicBarrier使用介绍
- ThreadGroup ThreadGroup implémente l'interface threadfactory en utilisant la classe Introduction + Custom thread Factory
- 云迁移的六大场景
- 贷款市场报价利率(LPR)与贷款基准利率介绍
- Redis数据库讲解(一)
猜你喜欢
在Clion中给主函数传入外部参数
ThreadGroup ThreadGroup implémente l'interface threadfactory en utilisant la classe Introduction + Custom thread Factory
redis数据库讲解二(redis高可用、持久化、性能管理)
VMware installation 64 bit XP Chinese tutorial
squid代理
OpenStack如何跨版本升级
使用Executors类快速创建线程池
VMware Workstation 无法连接到虚拟机。系统找不到指定的文件
01-nio basic ByteBuffer and filechannel
logback-logger和root
随机推荐
MySQL数据库讲解(七)
krpano全景之vtour文件夹和tour
gzip和gunzip 解压参数详解
快速搞懂线程实现的三种方式
不同时间类型的执行计划计算
HyperMotion云迁移助力中国联通,青云完成某央企上云项目,加速该集团核心业务系统上云进程
yml引用其他变量
Jmeter安装教程以及我遇到的问题的解决办法
MySQL lock database lock
RecyclerView细节研究-RecyclerView点击错位问题的探讨与修复
jsp学习3
JDBC和servlet写CRUD的接口总结
Installation and use of postman pit
mysql 5.1升级到5.611
查询2013年到2021年的数据,只查询到2020的数据,遇到了这个问题所进行的解决办法
Request module
JDBC详解
elk安装
ActiveMq基础知识
更改plsql工具栏的图标大小