MySQL原理与学习
目录
基础部分
外键约束
数据库三范式
多表关联查询(重点)
外链接
联合查询(很少用)
分组查询
Having分组过滤
子查询
JDBC
JDBC中如何设置事务隔离级别
应用篇
池化思想之数据库连接池
自己实现简易Java连接池
多数据源
索引
SQL技巧
MySQL的limit到底应该怎么优化
基础部分
varchar(N)长度并不是越长,越好,需要选择一个合适的长度。
因为:在内存中的操作方式,varchar也是按照最长的方式在内存中进行操作的。比如说要进行排序的时候,varcahr(100)是按照100这个长度来进行的,不合理的长度会浪费内存空间
对与大文件,大字符串就没有必要直接存在数据库里面了,因为数据库总的来说是比较慢的
对于大字符串,完全可以把它放入一个文件中,然后把文件的存放路径存到数据库里面,我们通过路径去直接定位文件
大字符串,放在数据库字段中,字符串匹配也是一个麻烦事儿
所以总结下来,字符串类型就用varchar和char就够了,一般不用text和blob
对于名字等短小的字符串,可以使用like "%宝%",这样的模糊查询;如果是像小说这种长的就不适合用模糊查询了,非常慢;长的文本查询要用ES,非常快,毫秒级;
外键约束
外键的目的:
加外键,是为了降低数据冗余,
把外键加到多的一方,是为了把冗余数据降到最低;
外键约束的作用:
为了防止黑户出现,比如电影表中,出现电影类型表中没有的电影类型的电影
关系型数据库,从来只能降低冗余,而不能把冗余完全消除;
数据库三范式
这个三范式有点过时, 一范式可以遵守,二三可以违反
最终,分不分开,还是要看业务需求,如果你有明确的查询需求,就分开,否则不分开也没啥;
实际上二范式,讲的就是多对多关系,出现冗余数据的问题(只有复合主键,才有可能出现非主键列只依赖主键的一部分的情况)
二范式,就是针对复合主键的,如果没有复合主键,也就根本不可能违反二范式了;
解决方案,就是把复合主键,放在第3张表,关系表中;
所以,第三范式,实际上讲的就是,将的一对多的情况,应该继续拆出一张多的表;
有的时候,我们宁可冗余,从而减少表连接查询,所以很多公司都表示可以进行冗余数据,存储空间很大,速度优先是第一位的;所以,阿里巴巴才会禁止表连接查询;
比如,我们直接把电影类型,冗余进电影表中,这样想知道每个电影的类型时,就不用再进行表连接了,这就叫牺牲空间换时间;
所以,现在三范式有点过时, 一范式可以遵守,二三可以违反
多表关联查询(重点)
关联查询时,首先要选好查询主表
怎么选择主表,就看那个表中有你需要的最主要的信息,其余的辅助的信息就通过和主表关联查询出来就好;比如,用户喜欢哪些类型,就在u_c表中,类型名等辅助信息,就通过u_c表关联类型表就好;
早期mysql版本这种方式是,先笛卡尔积一个大表在内存中,然后在内存中,再进行条件过滤(但是现在的新版本,也改成内连接的模式了)
而Join on内连接,是一边拼接,一边过滤,所以不会耗费太多内存;
总之,养成好习惯,尽量使用内连接,不要使用笛卡尔积查询;
外链接
这个的作用就是为了做报表时,数据能齐全一些;
内连接是发现条件不成立时,就赶尽杀绝;外连接就是就算条件不成立,也会保留左表或者右表;
联合查询(很少用)
就是求,交、并、差集
Union,是求并集,会去重;Union all,是求并集,不去重;
联合查询用的不多,还不如条件时,用个或OR 条件,来求并集;
分组查询
聚合函数作用在列名上时,不计算null,null不进行统计直接跳过
面试题:
count(1)会统计null值,所以统计行数,不建议写count(列表),而使用count(1)
where要写在group by的前面,表示的含义是:满足这个where条件的记录,才有资格参加接下来的分组;
普通的查询,只能先分组,再对每个组通过聚合函数得到的整体数据,进行排序
Having分组过滤
订单表是多组 多对多关系的合成表
含义是:哪个员工,给哪个用户,卖了哪部电影,卖了多少张;
聚合函数只能用在3个地方:字段列表中,order by后面,having后面;
where是一行行过滤,不能聚合
having是一组一组过滤,能使用聚合函数
子查询
标量子查询
这里,是子查询查出值后,再作为外层父查询的条件值,一行一行过滤父查询中不满足条件的每一行;
列子查询
这是两种解法
行子查询
这是标量子查询的写法
行子查询用得少,大部分人都用上面的标量子查询替代;
表子查询(重点)
俗称:套娃
再以上面这个查询的结果,作为“新表”,对这个新表通过员工id再进行分组
总结:
当想对一个分组的结果,再进行分组时,就只能使用表子查询,别无他法;
上面是方法一
下面是方法二
推荐使用方法二,因为方法一是以父查询做驱动,执行父查询的一行都要执行一次子查询;
JDBC
任何两个程序之间,只要有通信,那么之间就一定会有协议/标准,有了协议就能够实现解耦;
浏览器和服务器之间通信,就有http协议,有了http协议就能够实现浏览器与服务器的解耦,不论使用什么类型的浏览器,服务器都只管接收http格式的请求就好;
JDBC就是java程序和数据库程序之间通信的协议/标准;有了JDBC协议,就让java程序有了统一访问的能力,访问任何数据库都只针对jdbc接口编程,从而实现解耦与统一访问;
这也是一种依赖倒置的思想,加中间接口层,实现上下层的依赖解耦;
java程序和数据库之间,既是通过jdbc协议分开的,但也是通过jdbc协议沟通的;
什么是JDBC?JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。
使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。
例如,我们在Java代码中如果要访问MySQL,那么必须编写代码操作JDBC接口。注意到JDBC接口是Java标准库自带的,所以可以直接编译。而具体的JDBC驱动是由数据库厂商提供的,例如,MySQL的JDBC驱动由Oracle提供。因此,访问某个具体的数据库,我们只需要引入该厂商提供的JDBC驱动,就可以通过JDBC接口来访问,这样保证了Java程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的JDBC驱动:
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐│ ┌───────────────┐ ││ Java App │
│ └───────────────┘ ││
│ ▼ │┌───────────────┐
│ │JDBC Interface │<─┼─── JDK└───────────────┘
│ │ │▼
│ ┌───────────────┐ ││ JDBC Driver │<───── Vendor
│ └───────────────┘ ││
└ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ┘▼┌───────────────┐│ Database │└───────────────┘
从代码来看,Java标准库自带的JDBC接口其实就是定义了一组接口,而某个具体的JDBC驱动其实就是实现了这些接口的类:
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐│ ┌───────────────┐ ││ Java App │
│ └───────────────┘ ││
│ ▼ │┌───────────────┐
│ │JDBC Interface │<─┼─── JDK└───────────────┘
│ │ │▼
│ ┌───────────────┐ ││ MySQL Driver │<───── Oracle
│ └───────────────┘ ││
└ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ┘▼┌───────────────┐│ MySQL │└───────────────┘
实际上,一个MySQL的JDBC的驱动就是一个jar包,它本身也是纯Java编写的。我们自己编写的代码只需要引用Java标准库提供的java.sql包下面的相关接口,由此再间接地通过MySQL驱动的jar包通过网络访问MySQL服务器,所有复杂的网络通讯都被封装到JDBC驱动中,因此,Java程序本身只需要引入一个MySQL驱动的jar包就可以正常访问MySQL服务器:
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐┌───────────────┐
│ │ App.class │ │└───────────────┘
│ │ │▼
│ ┌───────────────┐ ││ java.sql.* │
│ └───────────────┘ ││
│ ▼ │┌───────────────┐ TCP ┌───────────────┐
│ │ mysql-xxx.jar │──┼────────>│ MySQL │└───────────────┘ └───────────────┘
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘JVM
mysql-xxx-driver.jar就是实现了jdbc的那一系列接口;
使用JDBC的好处是:
各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;
Java程序编译期仅依赖java.sql包,不依赖具体数据库的jar包;
可随时替换底层数据库,访问数据库的Java代码基本不变。
Connection是连接,通过Connection拿到这个连接上的Statement,Statement就是车, sql就是货物,Statement车,就是在连接上,运送 sql这个货物,sql执行完后,车再把执行结果运回来,所以我们拿sql执行结果也是找Statement车拿;
sql注入
预防sql注入,就用preparedStatement替代Statement
jdbc中操作日期,只能使用java.sql.Date
为什么preparedStatement可以防止sql注入?
设计思想:
1. 不要帮用户做决定
2. 无论下层什么存储结构,都给上层返回统一的数据结构
第3点,如果我们的下层存储使用的不是数据库,那么上层也就无法接收ResultSet,但是无论底层存储是文件还是数据库还是其他,我们给上层调用者都返回List,从而就实现了上层与下层存储结构的解耦;
这个时候,上层就是面向对象编程了,上层只需要调用Dao方法就好了,不用再写sql或者关注Dao层是如何实现的了;
不用关注Dao层是直接用的jdbc还是mybatis,还会jpa等等;
代码中,要尽量避免魔法数字,尽量用常量单词代替;
JDBC中如何设置事务隔离级别
读未提交隔离级别:
就是线程T1开始了事务,并修改了表记录,但是T1还没提交事务、
此时,线程T2去读取表,就会读到T1修改了但是还未提交的哪些表记录
转账事务操作
现在是使用的笨办法,
后面可以使用ThreadLocal得同一个线程内的两个不同的方法,可以获取到同一个Connection对象,从而使得同一个线程内的两个不同的方法,有共享同一个事务的机会;
不要使用字符串来保存日期数据,字符串占用空间大,损失日期类型函数的便捷性,比如日期类型可以直接加减日期
如何做sql监控
分表是因为单表过大导致查询索引过慢,
分库是受限于物理单机的性能导致可用连接数有上限。
至于分表,分库还是分表分库要看到底遇到了上面哪种情况。
三层的索引节点,就能指向10E左右的叶子节点,每个叶子节点存2跳数据,也就是4层,就有20E数据
一版,默认一个数据块,能方1000个指针
mysql索引:10亿条数据,索引查询到底有多快?_哔哩哔哩_bilibili
【IT老齐007】为什么大厂在大表做水平分表时严禁使用自增主键
1. 区间分区,会造成单机压力,尾部热点问题
2. uuid作主键会造成索引重排
3. 分布式环境,用雪花算法生成id
uuid还有一个缺点,就是128,太长了
应用篇
池化思想之数据库连接池
池化思想是一种提升系统性能的方式,连接池、线程池…这些池化技术的核心思想就是 空间换取时间。
数据库连接的声明周期
主要说下当当前连接数为最大连接数时的两步操作,一共设计了两种等待方式,根据传的 计量时间(timeout_ms) 来判断,
如果timeout_ms<=0,则表明我选择死等的方式,即一直阻塞等待,止到有空闲连接为止
否则timeout_ms>0,则表示等待阻塞这么长时间,如果超过了这么长时间,还没有空闲连接,直接返回NULL即可
DataSource 是自 JDK 1.4 提供的一个标准接口,用于获取访问物理数据库的 Connection 对象。
JDK 不提供其具体实现,而它的实现来源于各个第三方驱动程序供应商或数据库访问框架,例如 Spring JDBC、Tomcat JDBC、MyBatis、Druid、C3P0、Seata 等。
public interface DataSource extends CommonDataSource, Wrapper {Connection getConnection() throws SQLException;Connection getConnection(String username, String password) throws SQLException;
}
inner就是真正的MySQL的数据库连接对象,NewProxyConnection实际上是inner的代理
这里还可以多设置一个最小连接数为1或者0
close一个connection也不是真的关闭,而是把它还回了连接池
注意:
如果连接池中设置最大连接数为1,第一次请求用完连接后没有close(),那么第二次请求就在连接池中拿不到连接,那么当前线程就会一直处在一个等待状态
参考链接:
DataSource接口,一个被大多数程序员忽略的接口_马称同学的博客-CSDN博客_datasource接口
讲述了使用 DataSource 比 DriverManager获取数据库连接的好处
自己实现简易Java连接池
学习几点:
- DataSourse接口和Connection接口的作用
- 用装饰器模式封装Mysql原装的Connection接口实现类的close()方法
- 用jdk动态代理封装Mysql原装的Connection接口实现类的close()方法
- 体会jdk动态代理比装饰器模式优越的点:动态代理我们只需要只关注目标类的目标方法本身,目标类的其他方法不用管,比装饰设计模式更加地简洁
参考链接:如何使用动态代理,自己写一个数据库连接池?
首先纠正一个常见的误解。IO多路复用听上去好像是多个数据可以共享一个IO(socket连接),实际上并非如此。「IO多路复用不是指多个服务共享一个连接,而仅仅是指多个连接的管理可以在同一进程」 。在网络服务中,IO多路复用起的作用是「一次性把多个连接的事件通知业务代码处理」 。至于这些事件的处理方式,到底是业务代码循环着处理、丢到队列里,还是交给线程池处理,由业务代码决定。
参考链接:面试官:为什么数据库连接池不采用 IO 多路复用?
总结一下。DB 访问一般采用连接池这种现象是生态造成的。历史上的 BIO + 连接池的做法经过多年的发展,已经解决了主要的问题。在 Java 的大环境下,这个方案是非常靠谱的,成熟的。而基于 IO 多路复用的方式尽管在性能上可能有优势,但是其对整个程序的代码结构要求过多,过于复杂。当然,如果有特定的需要,希望使用 IO 多路复用管理 DB 连接,是完全可行的。
多数据源
SpringBoot多数据源:动态数据源 - hanease - 博客园
在应用程序中配置多个DataSource也有配置了多个数据源
动态数据源
实现动态数据源的关键点在于需要实现一个 DataSource,支持在 getConnection 方法调用时,能够取到需要的数据源 Connection 对象。
根据此业务场景 Spring 框架在早期 2.0 版的时候提供了一个 AbstractRoutingDataSource 抽象类(建议阅读该类源码),开发者可对其实现抽象方法,来实现动态数据源切换
读写分离
可以在动态数据源的基础上实现读写分离,在读操作和写操作方法上设置不同的 AOP 切面进行 DataSource 切换,进而实现读和写拿到不同的数据源 Connection 对象。
除编程方式实现读写分离外,还有分布式数据库中间件,通过判断 SQL 同样能实现读写分离,例如:ShardingSphere、Mycat、Cobar
索引
索引是一种“排好序”的数据结构
索引数据结构
•二叉树 •红黑树 •Hash表 •B-Tree
操作系统一页4k,innodb存储引擎一页16k,innodb使用页的概念,很好的提高了磁盘读取的效率, 不然就会读一行就需要一次磁盘io,现在多行都在同一页上,只需要一次磁盘io。 操作系统弄出页的概念,也是为了提高读取磁盘的效率,也便于更好的管理磁盘
B树和B+树区别
B树叶子结点只有部分数据,B树需要非叶子节点 + 叶子节点一起才是整张表完整的数据
B树的叶子节点之间是没有指针相连的,从而B树对于范围查询的效率不如B+树
两层的b+树比较好,3层也还行,如果4层就需要分库分表了, 三层至少可以存2000w行以上了
算法:上图的小白框就是一个指针,一个指针指向一个块,一个指针6字节、一个int4字节,一个指针6字节,所以一页可以存16k/10b ,等于1638个对,能指向1638个页
一个B+树加叶子节点3层的结构就能存2000w级别的数据
B+树相对于B树,存储同样数据量的数据,B+树的高度会更低,这是为什么最终存储索引结构选择B+树的原因
从叶子结点,从左往右叫全表扫描, 从上往下检索叫走索引
主键索引的叶子结点存全部数据,普通索引的叶子结点存的是当前索引值+主键值
a字段走索引,找a大于或者小于6都能走索引,第一步会先找到a等于6,然后因为叶子结点是双向链表,所以范围查找很方便
普通索引的范围查找,有可能会导致索引失效,当数据库认为当前走全表扫描,比走普通索引+ 回表,要快时,就会走全表扫描,此时索引就失效了
因为mysiam索引文件和数据文件是分开的,所以通过索引文件定位到某条记录的地址后,还要去读取数据文件才能拿到真正的数据,所以速度肯定比innodb慢
b➕树,叶子结点是含有全部数据:叶子结点对应的页是数据页,叶子结点页的上面几层全是索引页,两者聚集在一起所以引主键索引又叫聚集索引
聚集索引:数据和索引放在一起的,在同一个文件中,索引和数据都是按照一定的顺序存放的。
聚集索引的二级索引又叫辅助索引、也叫普通索引、也叫非主键索引。普通索引的叶子节点存的是主键,所以还要去主键索引中进行一次“回表”,才能拿到真正的数据,所以二级索引实际上也可以认为是非聚集索引的一种表现形式
非聚集索引:叶子结点不存数据,而存行数据的地址
推荐使用整型作主键,整型占用的空间比字符串小,从而整型作为索引的索引文件占用空间更小、整型更适合进行比较大小
推荐使用自增主键,自增的主键能依次的把每个索引块填满,再去填下一个索引块,减少快分裂和块合并
提高链表查询效率的方法,空间换时间
Hash索引理想情况下,只需要1次磁盘IO就能查到数据,所以等值查询会比B+树快,但是不支持范围查询
联合索引
索引最左前缀原则,就是因为联合索引就是按照三个字段的顺序排好序的
覆盖索引
type为index:index代表全索引扫描,也就是扫描全索引不需要回表就能拿到结果,一般是扫描某个二级索引,这种扫描不会从索引树根节点开始快速查找,而是直接 对二级索引的叶子节点遍历和扫描,速度还是比较慢的,这种查询一般为使用覆盖索引,二级索引一般比较小,所以这 种通常比ALL快一些(但是index效率其实也是不高的,也就是对于index的情况是需要优化的)
即:如果要查找的字段组合,在主键索引里面有,在二级索引里面也能全部获取到,那么MySQL会优先走二级索引,因为二级索引占用的空间比主键索引小。比如,A表有a、b、c三个字段,a字段是主键,b字段有二级索引,那么select a,b from A;这条SQL就会优先走二级索引
ALL:即全表扫描,扫描你的聚簇索引的所有叶子节点。通常情况下这需要增加索引来进行优化了
因为主键索引占用空间比二级索引空间大,所以扫描主键索引的效率肯定就比index低一点,也就是说ALL效率比index低一点
key_len列 这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了联合索引中的哪些列
Extra列 这一列展示的是额外信息。
常见的重要值如下: 1)Using index:使用覆盖索引
范围查询导致索引失效的原因
此时,范围查找,查处7条记录,需要回七次表
而全表扫描,只需要扫4页,则认为走全表扫描更快
此时,又走索引了,当mysql发现走全表扫描时,要比比走索引➕回表,要快时,就回又全表扫描
覆盖索引
就是当前你要查询的字段,正好在索引内,不需要回表 ,using index表示走了覆盖索引
【IT老齐007】为什么大厂在大表做水平分表时严禁使用自增主键
1 区间分区,会造成单机压力,尾部热点问题 2 uuid作主键会造成索引重排 3 分布式环境,用雪花算法生成id
uuid还有一个缺点,就是128,太长了
1 操作系统一页4k,innodb一页16k,innodb使用页的概念,很好的提高了磁盘读取的效率, 不然就会读一行就需要一次磁盘io,现在多行都在同一页上,只需要一次磁盘io。 操作系统弄出页的概念,也是为了提高读取磁盘的效率,也便于更好的管理磁盘
B树叶子结点只有部分数据,而b➕树,叶子结点是含有全部数据:叶子结点对应的页是数据页,叶子结点页的上面几层全是索引页,两者聚集在一起所以主键索引又叫聚集索引
从叶子结点,从左往右叫全表扫描, 从上往下检索叫走索引
主键索引的叶子结点存全部数据,普通索引的叶子结点存的是当前索引值+主键值
a字段走索引,找a大于或者小于6都能走索引,第一步会先找到a等于6,然后因为叶子结点是双向链表,所以范围查找很方便
普通索引的范围查找,有可能会导致索引失效,当数据库认为当前走全表扫描,比走普通索引+ 回表,要快时,就会走全表扫描,此时索引就失效了
提高链表查询效率的方法,空间换时间
两层的b加树比较好,3层也还行,如果4层就需要分库分表了, 三层至少可以存2000w行以上了
算法:一个int4字节,一个指针6字节,所以一页可以存16k/10b ,等于1638个对,能指向1638个页
order by 导致索引失效的原因
因为此时走索引,虽然不需要排序了,但是有多少数据就要回多少次表。而直接全表扫描,然后去内存中排序的耗时相对是很少的。所以当前这个sql走了全表扫描,而没有走索引
索引扫描原理
这里,没有where条件,但是bcd联合索引中,也存了b的值,
但是,主键索引中存了全部的数据,那么就占用了更多的页,从而走主键索引来全表扫描来获取字段b,需要扫描更多的页
但是,如果走bcd的联合索引,叶子结点只存了主键值,从而只需要扫描更少的页,就可以过去到全部行的字段b的值,所以这里系统自动选择了走bcd联合索引,而不是走主键的所在的全表扫描
order by 导致索引失效的原因
因为此时走索引,虽然不需要排序了,但是有多少数据就要回多少次表。而直接全表扫描,然后去内存中排序的耗时相对是很少的。所以当前这个sql走了全表扫描,而没有走索引
这个sql,虽然也是order by但是因为不需要回表了,所以,就还是走索引
e是字符类型, mysql再字符与数字相比时,普通字符会被先转成0,数字字符串 会被转成对应的数字,所以上面
对字段进行操作就会使索引失效
对字段进行数据类型转换,进行加减法,都会导致索引失效,但是对字段名=等号右侧的常量进行操作,不会引起索引失效
幻读强调的是集合数量的增加,不可重复读强调的是同一条记录,前后数据不一致
一个表可以有多个唯一索引,唯一索引可以有空值
大概是2000w行
读写分离优点不说了,缺点就是因为是异步复制数据的,就有可能完成数据不一致,不过这种概率是很低的,一般是可以容忍的
水平分表,有哈希分区和时间分区
带来的问题,每次查询都要带上拆分键
SQL技巧
MySQL的limit到底应该怎么优化
id是前端传过来的,是每次分页查询的最后一条记录
有了覆盖索引,就不需要回表,效率也是比较好的
MySQL原理与学习相关推荐
- 对MySQL 进行深入学习是非常必要的
MySQL 在互联网行业非常流行,腾讯,阿里等互联网巨头都在深入使用MySQL, 我在腾讯时也使用MySQL,我在微信群里经常听到大家对MySQL 的意见也很大. 在传统企业环境下使用最多的数据库产品 ...
- 【MySQL原理解析】01. 一条SQL查询语句是如何执行的
这是[MySQL原理解析]的第一篇文章,MySQL我看了很多的书与教程,对其原理有一定的理解,一直想写一系列的文章来把MySQL的原理给讲清楚,一直没有时间写,今天算是个开头吧.万事开头难,咱们先破了 ...
- 架构师技能6:深入MySQL原理-Waiting for table metadata lock引发系统崩溃
开篇语录:以架构师的能力标准去分析每个问题,过后由表及里分析问题的本质,复盘总结经验,并把总结内容记录下来.当你解决各种各样的问题,也就积累了丰富的解决问题的经验,解决问题的能力也将自然得到极大的提升 ...
- MySQL,Oracle系统学习,以及SQL语言-----数据库篇学习笔记
Handouts MySQL和Oracle系统学习 一. 开篇立意(~~~~必看,有说明~~~~) 二. Oracle 篇 数据库存在之意义 基础概念(必须看,后面不会说明!!!) Oracle管理系 ...
- 深度学习Spring5底层原理(黑马学习随笔)
学习随笔简介 跟随着黑马满老师的<黑马程序员Spring视频教程,全面深度讲解spring5底层原理>学习,视频教程地址:黑马程序员Spring视频教程,全面深度讲解spring5底层原理 ...
- MySQL原理--隔离级别的实现方式--MVCC
原文网址:MySQL原理--隔离级别的实现方式--MVCC_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL的隔离级别的实现方式--MVCC. 这也是Java后端面试题中常见的一个问题. M ...
- 分布式系统服务注册与发现原理 SpringCloud 学习笔记
分布式系统服务注册与发现原理 & SpringCloud 学习笔记 分布式系统服务注册与发现原理 引入服务注册与发现组件的原因 单体架构 应用与数据分离 集群部署 微服务架构 架构演进总结 服 ...
- Mysql原理与实践学习总结
数据库(MySQL) 本文根据自己对MySQL的学习和实践以及各类文章与书籍总结而来. 囊括了MySQL数据库的基本原理和技术.本文主要是我的一个学习总结,基于之前的系列文章做了一个概括,如有错误,还 ...
- B站《一天学会 MySQL 数据库》学习笔记
B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...
最新文章
- 科普:String hashCode 方法为什么选择数字31作为乘子
- python 面向对象:类,作用域
- eclipse导入Java文件后出现中文乱码
- 51nod1258 序列求和 V4(伯努利数+多项式求逆)
- 反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux
- java 跨域上传_java后台图片跨域上传图片 文件
- 傻子坐飞机问题的求解
- django request对象和HttpResponse对象
- c语言打印%-6llu,从零开始学C语言
- Could not find class
- java 视频处理_java使用ffmpeg处理视频的方法
- 360安全浏览器极速模式怎么设置
- badbody下_badboy下载_badboy测试工具2.0.5官方免费版 - 系统之家
- 华为云obs对象存储使用教程
- GD32E230_timer2解析SIF通讯协议
- layim之刷新群聊列表
- mac安装软件的一般目录
- 做短视频必须要知道的几个视频设置参数,爆款必备。
- Linux内核升级(降级)
- 【Python】自动化办公之Excel拆分并自动发邮件
热门文章
- 【PMP】核对单和核查表的区别
- 剑指offer面试题2:实现单例模式
- 假如生产环境出现CPU占用过高,如何分析思路和定位?
- snmp v3 参数_snmp v3的安全配置 snmp认证与加密配置(53)
- Android前端通过Http协议与J2EE后端数据交互。工具eclipse、MySQL、Tomcat。通过JoSn获取数据。Android端实现对MySQL增删改查功能。
- PostgreSQL SQL 语言:全文搜索
- ie浏览器通过ActiveX控件获取本机macip(附带批处理一键开启)
- 2020-2021中国区块链企业发展白皮书.pdf.
- 榆树计算机课,吉林省榆树市弓棚镇武龙中学校七年级信息技术:第九课 Excel表格计算 教案+课件 (2份打包)...
- 详情页用虚拟机还是云服务器,详情页用虚拟机还是云服务器