MySql
文章平均质量分 88
MySql
猎户星座。
花有重开日,人无再少年。
展开
-
数据库乐观锁
从本质上讲,乐观锁是在首次读取或访问数据记录进行潜在更新,但实际上并未锁定数据记录。使系统在乐观的假设下运行,即冲突很少且不会经常发生。仅当即将提交实际更新时,系统才会检查冲突。如果数据同时被另一个事务更改,则当前更新失败。第一步是向您的实体添加版本字段并使用 @Version 对其进行注解。该字段通常可以是整数或时间戳。@Entity@Id@Version在此设置中,JPA 将使用版本字段来跟踪每个产品实体的更改。转载 2024-02-21 15:26:53 · 228 阅读 · 0 评论 -
图解MySql原理
数据库是程序猿的必备技能,不管是前端还是后端都或多或少的对他有些了解,一直以来都对数据库的运行原理特别感兴趣,本文对 B 站猿人克林 MySql 视频课程(作者大大特别厉害,感兴趣的可以去看下原视频哈) 中知识的学习整理了 Mysql 系统架构&运行原理、写入原理、存储结构、执行原理、页和行结构、索引等,每幅图都包含丰富且全面的内容,经过两周的学习整理基本上将数据库的一些底层基础都整理下来了,希望对大家有帮助。转载 2022-12-06 20:20:15 · 257 阅读 · 0 评论 -
MySql之索引下推
什么是索引下推索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,它能减少回表查询次数,提高查询效率。索引下推优化的原理我们先简单了解一下MySQL大概的架构:MySQL服务层负责SQL语法解析、生成执行计划等,并调用存储引擎层去执行数据的存储和检索。索引下推的下推其实就是指将部分上层(服务层)负责的事情,交给了下层(引擎层)去处理。我们来具体看一下,在没有使用ICP的情况下,MySQL的查询:存储引擎读取索引记录; 根转载 2022-01-29 09:54:38 · 509 阅读 · 0 评论 -
for update
MySQL的存储引擎是InnoDB时 for update有行锁和表锁。用法:select ... for update注意点仅适用于InnoDB,必须在事务块 begin/commit中才有效 当有明确的主键/索引时是行级别的锁,否则是表级别的锁验证数据库表如下id是主键,name有索引,age和createtime无索引验证1(有明确的主键/索引是是行级别的锁)Terminal 1 执行begin;select * from bintest.afs_tes转载 2022-01-26 11:10:10 · 3755 阅读 · 0 评论 -
MySql之缓存池
1、Buffer Pool 概述Buffer Pool 是什么?从字面上看是缓存池的意思,没错,它其实也就是缓存池的意思。它是 MySQL 当中至关重要的一个组件,可以这么说,MySQL的所有的增删改的操作都是在 Buffer Pool 中执行的。但是数据不是在磁盘中的吗?怎么会和缓存池又有什么关系呢?那是因为如果 MySQL的操作都在磁盘中进行,那很显然效率是很低的,效率为什么低?因为数据库要从磁盘中拿数据啊,那肯定就需要IO啊,并且数据库并不知道它将要查找的数据是磁盘的哪个位置,所以这就需要进行转载 2021-03-25 10:39:48 · 351 阅读 · 1 评论 -
数据结构之红黑树
二叉搜索树对于某个节点而言,其左子树的节点关键值都小于该节点关键值,右子树的所有节点关键值都大于该节点关键值。二叉搜索树作为一种数据结构,其查找、插入和删除操作的时间复杂度都为O(logn),底数为2。但是我们说这个时间复杂度是在平衡的二叉搜索树上体现的,也就是如果插入的数据是随机的,则效率很高,但是如果插入的数据是有序的,比如从小到大的顺序【10,20,30,40,50】插入到二叉搜索树中: 从大到小就是全部在左边,这和链表没有任何区别了,这种情况下查找的时间复杂度为O(N),而不是O(logN转载 2021-03-24 20:43:14 · 109 阅读 · 0 评论 -
Spring之事务
1. 什么是事务?事务是逻辑上的一组操作,要么都执行,要么都不执行。Guide 哥:大家应该都能背上面这句话了,下面我结合我们日常的真实开发来谈一谈。我们系统的每个业务方法可能包括了多个原子性的数据库操作,比如下面的 savePerson() 方法中就有两个原子性的数据库操作。这些原子性的数据库操作是有依赖的,它们要么都执行,要不就都不执行。 public void savePerson() { personDao.save(person); personDetailDao.sav转载 2021-02-27 21:17:19 · 100 阅读 · 0 评论 -
MySql之分库分表
1 Sharding把数据库横向扩展到多个物理节点的一种有效方式,主要是为了突破数据库单机服务器的 I/O 瓶颈,解决数据库扩展问题。Sharding可简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个shard,分区方式可以是任意的,并不局限于传统的水平分区和垂直分区。 一个shard可以包含多个表的内容甚至可以包含多个数据库实例中的内容。每个shard被放置在一个数据库服务器上。一个数据库服务器可以处理一个或多个shard的数据。系统中需要有服务器进转载 2021-02-17 20:45:28 · 161 阅读 · 0 评论 -
MySql之主从复制延时
一、MySQL主从复制模型一切都要从MySQL的主从复制模型开始说起,下图是最经典的MySQL主从复制模型架构图:MySQL的主从架构依赖于MySQL Binlog功能,Master节点上产生Binlog并将Binlog写入到Binlog文件中。Slave节点上启动两个线程:一个IO线程,从MySQL上捞取Binlog日志并写入到本地的RelayLog日志;另一个SQL线程,不断从RelayLog日志中读取日志,并解析执行,这样通过在主机和从机上增加几个文件的顺序读写操作,就可以保证所有在主转载 2021-02-16 22:21:07 · 234 阅读 · 0 评论 -
ACID/CAP/BASE理论
ACID理论原子性事务的原子性是指事务必须是一个原子的操作序列单元。事务中包含的各项操作在一次执行过程中,要么全部执行,要么全部不执行。任何一项操作失败都将导致整个事务失败,同时其他已经被执行的操作都将被撤销并回滚。只有所有的操作全部成功,整个事务才算是成功完成。一致性事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行前后,数据库都必须处于一致性状态。...转载 2019-11-02 13:27:45 · 629 阅读 · 0 评论 -
MySql之事务操作
Mysql中事务操作mysql中事务默认是隐式事务,执行insert、update、delete操作的时候,数据库自动开启事务、提交或回滚事务。是否开启隐式事务是由变量autocommit控制的。所以事务分为隐式事务和显式事务。隐式事务事务自动开启、提交或回滚,比如insert、update、delete语句,事务的开启、提交或回滚由mysql内部自动控制的。查看变量autocommit是否开启了自动提交mysql>showvariableslike'auto...转载 2020-07-10 10:37:12 · 398 阅读 · 0 评论 -
缓存与数据库的双写一致性
相信只要是个稍微像样点的互联网公司,或多或少都有自己的一套缓存体系只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,遂笔者想在这想和大家聊一聊:如何解决一致性问题?如何保证缓存与数据库双写一致性,也是现在Java面试中面试官非常喜欢问的一个问题!一般来说,如果允许缓存可以稍微跟数据库偶尔有不一致,也就是说如果你的系统不是严格要求 缓存 + 数据库 必须保持一致性的话,最好不要做这个方案。即:读请求和写请求串行化,串到一个内存队列里去,从而达到防止并发转载 2020-06-05 17:04:15 · 375 阅读 · 1 评论 -
MySql之主从复制
为什么要做主从复制? 在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。通过做主从复制(读写分离)来减轻主数据库的负载 做数据的热备 业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/...原创 2020-04-19 11:53:11 · 436 阅读 · 0 评论 -
MySql之日志
在任何一种数据库中,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件。 MySQL也不例外,在 MySQL中,有4种不同的日志,分别是错误日志、二进制日志( BINLOG日志)、查询日志和慢查询日志,这些日志记录着数据库在不同方面的踪迹错误日志错误日志是MSQL中最重要的日志之一,它记录了当 mysqld启动和停止时,以及服务器在运行过程中...转载 2020-04-15 21:28:30 · 154 阅读 · 0 评论 -
MySql之整体架构
MySQL整体架构与所有服务端软件一样,MySQL采用的也是C/S架构,即客户端(Client)与服务端(Server)架构,我们在使用MySQL的时候,都是以客户端的身份,发送请求连接到运行服务端的MySQL守护进程,而MySQL服务器端则根据我们的请求进行处理并把处理后的结果返回给我们,这个过程可以简单地抽像成下面的示意图:客户端(Client)在安装后MySQL之后,在...转载 2019-11-06 20:18:58 · 320 阅读 · 1 评论 -
MySql之索引
Mysql 索引精讲开门见山,直接上图,下面的思维导图即是现在要讲的内容,可以先有个印象~常见索引类型(实现层面) 索引种类(应用层面) 聚簇索引与非聚簇索引 覆盖索引 最佳索引使用策略1.常见索引类型(实现层面)首先不谈Mysql怎么实现索引的,先马后炮一下,如果让我们来设计数据库的索引,该怎么设计?我们首先思考一下索引到底想达到什么效果?其实就是想能够实现快速查...转载 2019-11-05 20:50:17 · 30581 阅读 · 7 评论 -
MySql之MVCC
什么是 MVCCMVCC (Multiversion Concurrency Control)中文全称叫多版本并发控制,是现代数据库(包括MySQL、Oracle、PostgreSQL等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。如此一来不同的事务在并发过程中,SELECT操作可以不加锁而是通过MVCC机制读取指定的版本历史记录,并通过一些手...转载 2019-11-03 22:32:27 · 622 阅读 · 2 评论 -
数据库之事务隔离级别
在了解隔离级别之前,我们先了解几个名词:1、脏读所谓脏读,就是指事务A读到了事务B还没有提交的数据,比如银行取钱,事务A开启事务,此时切换到事务B,事务B开启事务-->取走100元,此时切换回事务A,事务A读取的肯定是数据库里面的原始数据,因为事务B取走了100块钱,并没有提交,数据库里面的账务余额肯定还是原始余额,这就是脏读。2、不可重复读所谓不可重复读,就是指在一个事务里...转载 2019-11-03 11:44:16 · 207 阅读 · 0 评论 -
MySql之慢Sql定位分析
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1、为查询缓存优...转载 2019-01-08 14:23:13 · 294 阅读 · 0 评论 -
MySql之存储引擎
MySQL 的架构MySQL 从第一个版本发布到现在已经有了 20 多年的历史,在这么多年的发展和演变中,整个应用的体系结构变得越来越复杂:最上层用于连接、线程处理的部分并不是 MySQL 『发明』的,很多服务都有类似的组成部分;第二层中包含了大多数 MySQL 的核心服务,包括了对 SQL 的解析、分析、优化和缓存等功能,存储过程、触发器和视图都是在这里实现的;而第三层就是 MySQ...转载 2019-01-08 11:34:03 · 166 阅读 · 0 评论