不是吧阿sir(1),史上最全
同⼀字段的多次读取结果都是⼀致的,除⾮数据是被本身事务⾃⼰所修改;
可重复读是有可能出现幻读的,如果要保证绝对的安全只能把隔离级别设置成SERIALIZABLE;这样所有事务都只能顺序执行,自然不会因为并发有什么影响了,但是性能会下降许多。
第二种方式,使用更新的版本控制。维护一个字段作为updateversion,修改时updateversion也作为一个参数传入,在条件语句中添加例如where id=? and update_version = ? 当然set里面要update_version+1。这样可以控制到每次只能有一个人更新一个版本。
4、RR和RC如何实现的?RR使用场景?
RC隔离级别获得的是语句级读一致性;RR隔离级别获得的是事务级读一致性
对于RC隔离级别,访问的数据是每次语句执行时间点的数据,而对于RR隔离级别,访问的数据是事务中第一条语句执行时间点的数据。
5、隔离级别的单位是数据表还是数据行?如串行化级别,两个事务访问不同的数据行,能并发?
6、存储引擎Innodb和Myisam的区别以及使用场景
Myisam: 支持表锁,适合读密集的场景,不支持外键,不支持事务,索引与数据在不同的文件
Innodb: 支持行、表锁,默认为行锁,适合并发场景,支持外键,支持事务,索引与数据同一文件
7、 介绍Inodb锁机制,行锁,表锁,意向锁
InnoDB⽀持⾏级锁(row-level locking)和表级锁,默认为⾏级锁
共享/排它锁(Shared and Exclusive Locks):行级别锁,
记录锁(Record Lock): 对索引项加锁,锁定符合条件的行。其他事务不能修改和删除加锁项;
Next-key Lock: 锁定索引项本身和索引范围。即Record Lock和Gap Lock的结合。可解决幻读问题。
8、介绍MVCC.
MVCC是一种多版本并发控制机制,在大多数情况下代替行级锁,使用MVCC,能降低其系统开销.
MVCC是通过保存数据在某个时间点的快照来实现的. 不同存储引擎的MVCC实现是不同的,典型的有乐观并发控制和悲观并发控制.
InnoDB只会查找版本早于当前事务版本的数据行(也就是,行的系统版本号小于或等于事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或者修改过的.
1.MVCC手段只适用于Msyql隔离级别中的读已提交(Read committed)和可重复读(Repeatable Read).
2.Read uncimmitted由于存在脏读,即能读到未提交事务的数据行,所以不适用MVCC.
原因是MVCC的创建版本和删除版本只要在事务提交后才会产生。客观上,我们认为他就是乐观锁的一整实现方式,就是每行都有版本号,保存时根据版本号决定是否成功。
9、哈希索引是如何实现的?
10、数据库索引为什么使用B+树,相对于B树有什么优点?为什么不能红黑树?
B+树的磁盘读写代价低,更少的查询次数,查询效率更加稳定,有利于对数据库的扫描
11、聚簇索引和非聚簇索引区别
聚簇索引: 将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据
非聚簇索引: 将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置
聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。
12、回表查询和覆盖索引
这就是所谓的回表查询,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。
覆盖索引:如果where条件的列和返回的数据在一个索引中,那么不需要回查表,那么就叫覆盖索引。
实现覆盖索引:常见的方法是,将被查询的字段,建立到联合索引里去。
13、如何创建索引?
CREATE TABLE 表名( 字段名 数据类型 [完整性约束条件],
……, [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [索引名](字段名1 [(长度)] [ASC | DESC]) [USING 索引方法] );
说明: UNIQUE:可选。表示索引为唯一性索引。 FULLTEXT:可选。表示索引为全文索引。 SPATIAL:可选。表示索引为空间索引。
INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是一样的。 索引名:可选。给创建的索引取一个新名称。
字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。 长度:可选。指索引的长度,必须是字符串类型才可以使用。
ASC:可选。表示升序排列。 DESC:可选。表示降序排列。 注:索引方法默认使用B+TREE。
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [索引名]
(字段名1 [(长度)] [ASC | DESC]) [USING 索引方法];
或
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 ON 表名(字段名) [USING
索引方法];
14、如何避免全表扫描?
1.对查询进行优化,应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断
15、Explain语句各字段的意义
mysql> explain select * from staff;
±—±------------±------±-----±--------------±-----±--------±-----±-----±------+ | id | select_type | table | type | possible_keys | key | key_len |
ref | rows | Extra |
±—±------------±------±-----±--------------±-----±--------±-----±-----±------+ | 1 | SIMPLE | staff | ALL | NULL | NULL | NULL |
NULL | 2 | NULL |
±—±------------±------±-----±--------------±-----±--------±-----±-----±------+ 1 row in set
| 列 | 含义 |
| — | — |
| id | 查询序号,序号越大越先执行,一样则按顺序执行 |
| select_type | 查询类型,SIMPLE、PRIMARY、UNION、SUBQUERY等 |
| table | 表名 |
| type | join类型,const,eq_ref,ref等 |
| possible_keys | join类型 |
| key | 实际选择的索引 |
| ken_len | 索引的长度 |
| ref | 与索引作比较的列 |
| rows | 要检索的行数 |
| Extra | 额外信息 |
16、最左前缀!!联合索引B+树是如何建立的?是如何查询的?当where子句中出现>时,联合索引命中是如何的?
最左前缀原则主要使用在联合索引中,联合索引的B+Tree是按照第一个关键字进行索引排列的。
联合索引的底层是一颗B+树,那么联合索引的底层也就是一颗B+树,只不过联合索引的B+树节点中存储的是键值。由于构建一棵B+树只能根据一个值来确定索引关系,所以数据库依赖联合索引最左的字段来构建。
采用>、<等进行匹配都会导致后面的列无法走索引,因为通过以上方式匹配到的数据是不可知的。
17、MySQL中一条SQL语句的执行过程
select * from student A where A.age='18' and A.name='张三';
先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在mysql8.0版本以前,会先查询缓存,以这条sql语句为key在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。
通过分析器进行词法分析,提取sql语句的关键元素,比如提取上面这个语句是查询select,提取需要查询的表名为tb_student,需要查询所有的列,查询条件是这个表的id=‘1’。然后判断这个sql语句是否有语法错误,比如关键词是否正确等等,如果检查没问题就执行下一步。
接下来就是优化器进行确定执行方案,上面的sql语句,可以有两种执行方案: a.先查询学生表中姓名为“张三”的学生,然后判断是否年龄是18。 b.先找出学生中年龄18岁的学生,然后再查询姓名为“张三”的学生。 那么优化器根据自己的优化算法进行选择执行效率最好的一个方案(优化器认为,有时候不一定最好)。那么确认了执行计划后就准备开始执行了。
进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。
总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。
这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来,需要的话点击这里免费获取
目录:
部分内容截图:
没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。
总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。
这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来,需要的话点击这里免费获取
目录:
[外链图片转存中…(img-KSE6G5Za-1628432225177)]
部分内容截图:
[外链图片转存中…(img-TOFKiPRd-1628432225180)]
[外链图片转存中…(img-Z6AW7Qh7-1628432225182)]
不是吧阿sir(1),史上最全相关推荐
- 这可能是史上最全的Python算法集!
来源 | CSDN(ID:CSDNnews ) 本文是一些机器人算法(特别是自动导航算法)的Python代码合集. 其主要特点有以下三点:选择了在实践中广泛应用的算法:依赖最少:容易阅读,容易理解每个 ...
- java spring框架 注解_史上最全的java spring注解
史上最全的java spring注解,没有之一 注解是个好东西,但好东西我们也是看见过,整理过,理解过,用过才知道好.不求我们每个都记住,但求保有印象,在需要的时候能提取出来再查找相关资料,平时工作就 ...
- 史上最全 Java 多线程面试题及答案
这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题. 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也 ...
- .Net魔法堂:史上最全的ActiveX开发教程——发布篇
一. 前言 接着上一篇<.Net魔法堂:史上最全的ActiveX开发教程--开发篇>,本篇讲述如何发布我们的ActiveX. 二.废话少讲,马上看步骤! 1. 打包 C#开发的Activ ...
- 史上最全《知识图谱》2020综述论文!!!
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 知识图谱是当下的研究热点.最近18位学者共同撰写了一篇<知识图谱>综述 ...
- 【干货】史上最全的Tensorflow学习资源汇总,速藏!
一 .Tensorflow教程资源: 1)适合初学者的Tensorflow教程和代码示例:(https://github.com/aymericdamien/TensorFlow-Examples)该 ...
- 吐血总结|史上最全的MySQL学习资料!!
在日常工作与学习中,无论是开发.运维.还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一.在互联网公司,开源产品线比较多,互联网企业所用的数据库占比较重的还是MySQL. 在刚刚出 ...
- “史上最全PyTorch资源汇总“(转载)
转载自"史上最全PyTorch资源汇总":教程.实战.必读论文.中文教材一应俱全 项目地址: https://github.com/INTERMT/Awesome-PyTorch- ...
- 史上最全异常检测算法概述
史上最全异常检测算法概述 参考文章: (1)史上最全异常检测算法概述 (2)https://www.cnblogs.com/Bang-cansee/p/4954129.html 备忘一下.
- python优化算法工具包_这可能是史上最全的 Python 算法集(建议收藏)
原标题:这可能是史上最全的 Python 算法集(建议收藏) 导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集.其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: ...
最新文章
- Atitit.提升 升级类库框架后的api代码兼容性设计指南
- Spring Cloud Config 加密和解密
- 导入技能要素三大类_教学技能之导入技能(值得收藏)
- mysql aes_MYSQL AES加密与解密函数使用
- 你家猫砸东西是不是也专挑贵的砸?
- Ubuntu16.04安装Hadoop+Spark+pyspark大数据python开发环境
- phpstudy本地搭建域名访问
- visual studio 删除附加项
- php手册 下载,php手册chm
- ShuffleNet v2
- 学习Coverity codexm的一些资料
- 霹雳吧啦Wz语义分割学习笔记P1
- 分布式服务协调---幂等(Idempotent)机制
- 炸了!3年图片都没了!
- Git 每次提交都需要输入密码
- Houdini 中DOP CHOP SHOP SOP VOP是什么?
- 51GIS学院|分享大数据项目架构思考(一)
- win7计算机虚拟内存,Win7系统怎样关闭虚拟内存?win7关闭虚拟内存的方法
- JavaScript自学基础
- 半导体物理-Threshold Voltage Model for FinFET