MySQL
一.四大特性
含义 | 详情 | |
---|---|---|
A(atomicity) | 原子性 | 即不可拆分的最小单元,事务要么一起成功,要么一起失败 |
C(consistency) | 一致性 | 事务由一种正确状态转为另一种正确状态 |
I(isolation) | 隔离性 | 不允许把未提交事务对数据做出的改变提供给其他事务 |
D(durability) | 持久性 | 事务提交后,做出的改变将永久保存在数据库中 |
二.存储引擎
通过在navicat中输入命令查看mysql的版本以及支持的引擎;YES表示可以使用、NO表示不能使用、DEFAULT表示该引擎为当前默认的存储引擎
1.Inoodb
支持事务、主键、外键约束
2.MyISAM
不支持事务
选择密集型表,筛选大量数据非常迅速;
插入密集型表,并发插入特性;
3.Memory
目标数据小且被非常频繁的访问;
数据的丢失对服务没实质性的影响
4.引擎的选择
- 如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择
- 如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率
- 如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果
- 如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive
- 使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能
三.隔离级别
1.读未提交(Read uncommitted)
事务可以读取到未提交事务对数据做出的改变,容易产生脏读问题;
2.读已提交(Read committed)
事务只能读取到已提交事务对数据做出的改变,避免了脏读问题,但会导致不可重复读和虚读问题;
3.可重复读(Repeatable read)
事务中的多个实例在并发情况下读取到的数据时一致的,但会导致幻读(一个用户在该范围读取一行数据,另一个事务在该范围插入了新行,当用户再次读取数据时会出现新的幻影行),通过GAP锁即可避免了幻读
4.可串行读(Serializable)
强制对事务进行排序,使之不会出现冲突的情况,相当于加上了共享锁
四.Mysql的锁
共享锁(读锁)
允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。即多个用户可以同时读取同一个资源,但不允许其他客户修改。
排他锁(写锁)
允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的读锁和写锁。写锁是排他的,写锁会阻塞其他的写锁和读锁。
行锁
表锁
乐观锁
悲观锁(行锁)
MVCC
MVCC即多版本并发控制,MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
GAP
五.视图
六.sql优化
七.B+树
注: 存储引擎参考:https://blog.csdn.net/bbj12345678/article/details/120786449
本文来自博客园,作者:weibo,转载请注明原文链接:https://www.cnblogs.com/weiboyaonuli/p/mysql.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)