
MySQL
文章平均质量分 80
丁真的小马
这个作者很懒,什么都没留下…
展开
-
BinLog和RedoLog区别
4)BinLog 开启事务时,会将每次提交的事务一次性写入内存缓冲区 ,如果未开启事务,则每次成功执行插入、更新和删除语旬时,就会将对应的事务信息写入内存缓冲区,而 Redo Log 是在数据准备修改之前将数据写入缓冲区的 Redo Log 中,然后在缓冲区中修改数据。而 Redo Log 记录的是物理页的修改,最后一个提交的事务记录会覆盖之前 所有未提交的事务记录,并且一个事务的 Redo Log 中间会插入其他事务的 Redo Log。3)Redo Log 具有。原创 2022-09-14 11:02:47 · 3901 阅读 · 0 评论 -
MySQL和Redis的数据一致性
一、保证数据一致性的四个方案先更新数据库,再更新缓存(有bug) 并发更新数据库场景下,会将脏数据刷新到缓存,不推荐 同时有请求A和请求B进行更新操作,那么会出现: 线程A更新了数据库; 线程B更新了数据库; 线程B更新了缓存; 线程A更新了缓存; 先更新缓存,再更新数据库(有bug) 缓存更新成功后,数据库更新失败,则会造成数据不一致性,而且也有并发问题,不推荐 先删除缓存原创 2022-01-08 16:18:20 · 166 阅读 · 0 评论 -
MySQL面试:为什么用自增列作为主键
1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。2、数据记录本身被存于主索引(一颗B+Tree)的叶子节点上,这就要求同一个叶子节点内(大小为一个内存页或磁盘页16K)的各条原创 2021-12-22 17:14:37 · 920 阅读 · 0 评论 -
MySQL进阶:锁
数据库锁的设计是处理并发问题,当出现并发访问的时候,数据需要合理地控制资源访问规则。一、全局锁全局锁是对整个数据库加锁。MySQL提供一个加全局锁的方法:Flush tables with read lock,之后数据库的更新语句(数据增删改),定义语句(建表、修改表结构等)和更新类事务的提交语句都会被阻塞。使用场景:全库逻辑备份,整个库完全处于只读状态。二、表级锁表级别的锁有两种:一种是表锁,一种是元数据锁表锁:lock tables 表名 read, 表2 write;unl原创 2021-12-22 16:45:57 · 784 阅读 · 0 评论 -
MySQL进阶:MVCC多版本并发控制
一、MVCC由来多版本控制: 指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后,只有写写之间相互阻塞,其他三种操作都可以并行,这样大幅度提高了InnoDB的并发度。在内部实现中,InnoDB是在undolog中实现的,通过undolog可以找回数据的历史版本。找回的数据历史版本可以提供给用户读(按照隔离级别的定义,有些读请求只能看到比较老的数据版本),也可以在回滚的时候覆盖数据页上的数据。在InnoDB内部中,会记录一个全局的活跃读写事务数组原创 2021-12-21 22:06:17 · 311 阅读 · 0 评论 -
MySQL:索引
一、索引的常见模型索引的出现是为了提高数据查询的效率。实现索引的方式有很多种,比较常见的数据结构有:哈希表、有序数组和搜索树。索引实在存储引擎层实现的,不同存储引擎索引工作方式不同。1.1 哈希表哈希表:键值存储的数据结构,输入待查找的key,找到对应的value。通过一个哈希函数把key换算成一个确定的位置,然后把value放在数组的位置。优点:适用于等值查询的场景,增加新的记录速度会很快。缺点:由于不是有序的,区间查询速度很慢。1.2 有序数组数组按索引字段的递增顺序保存原创 2021-11-14 17:01:36 · 1871 阅读 · 0 评论 -
MySQL:事务
事务:保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是引擎层实现的。MyISAM引擎不支持事务,InnoDB支持事务。一、事务的隔离级别1.1 事务的ACID属性ACID属性 含义 原子性(Atomicity) 事务是一个原子操作单元,其对数据的修改,要么全部成功,要么全部失败。 一致性(Consistent) 在事务开始和完成时,数据都必须保持一致状态。 隔离性(Isolation) 数据库系统提供一定的隔离机制,保证事务在不受原创 2021-11-13 18:15:55 · 870 阅读 · 0 评论 -
MySQL-日志系统:一条SQL更新语句是怎样执行的?
1、更新语句经过解析与优化,生成执行计划,交由执行器调用存储引擎接口执行器会多次调用存储引擎接口,并不是一次完成2、查询旧值,如果这个值不在内存缓冲区则需要查找旧值,从磁盘数据页加载到内存缓冲区3、先将旧值写入undo log日志文件中,用于回滚数据4、更新内存中的数据5、向更新操作写入内存中redo log buffer中6、redo log buffer里的日志每隔一秒会自动刷新到磁盘将redo log buffer中跟本事务相关的redo l...原创 2021-11-12 19:03:19 · 553 阅读 · 0 评论 -
MySQL explain详解
通过 EXPLAIN命令获取 MySQL如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。explain select * from tb_item where id = 1;一、字段概览字段 含义 id select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。 select_type 表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIM原创 2021-11-11 21:41:59 · 417 阅读 · 0 评论 -
MySQL:一条SQL查询语句是如何执行的?
一、MySQL的逻辑架构图MySQL分为Server层和存储引擎层两部分。Server层包括:连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,如存储过程、触发器、视图等。存储引擎层:负责数据的存储和提取。其架构是插件式的,支持InnoDB、MyISAM、Memory等多个存储引起。现在最常用的存储引擎是InnoDB,它从MySQL5.5版本开始成为默认的存储引擎。二、.原创 2021-11-11 11:05:57 · 357 阅读 · 0 评论