- 博客(21)
- 收藏
- 关注
原创 MySQL并发机制(二)——表锁
表的共享、独占锁:共享锁:类似于 JUC 下的 ReentrantReadWriteLock 下的 读锁。多个事务可以同时为数据加锁,同时访问到数据。独占锁:类似于 JUC 下的 ReentrantReadWriteLock 下的 写锁。同一时间,只能有一个事务获取为数据加锁。只能有一个事务访问到数据不同存储引擎的锁:默认情况下:在对某个表执行SELECT、INSERT、DELETE、UPDATE语句时(1): InnoDB是不会为这个表添加表级别的 S锁 或者 X锁 .
2022-03-16 15:13:16
385
原创 MySQL并发机制(一)——并发问题
一:读——读 情况即并发事务相继读取相同的记录 .读取操作本身不会对记录有任何影响,所以允许该情况的发生。二:写——写 操作实现原理:锁机制在多个未提交事务相继对一条记录做改动时,通过锁机制让多个事务排队执行。(1): 当事务T1想要对某条记录进行修改,首先会看看内存中有没有与这条记录关联的 锁结构。 当没有的时候,就会在内存中生成一个 锁结构 与之关联。(2):当事务T2也想要对该记录进行修改时,发现已经存在和这条记录想关联的锁结构,...
2022-03-14 22:43:47
799
原创 MySQL事务(三)——事务日志
日志作用:问题:事务有4种特性:ACID,那么事务的四种特性到底是基于什么机制实现呢?答:(1):事务的隔离性由 锁机制 实现。(2):REDO LOG 提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。(3):UNDO LOG回滚行记录到某个特定版本,用来保证事务的原子性、一致性。Redo log:作用:问题:如何保证在事务提交后即使系统发生了崩溃,这个事务对数据库中所做的更改也不能丢失?方案一:在事务提交完成之前把该事务所修改的所有页面都刷新到磁
2022-03-14 22:39:34
400
原创 MySQL事务(二)——事务的隔离级别
数据并发问题:脏写:如果事务A 修改了 另一个 未提交 事务B 修改过 的数据,那就意味着发生了 脏写脏读:对于两个事务 A、B,A 读取 了已经被B 更新 但还 没有被提交 的字段。之后若 B 回滚 ,A 读取 的内容就是 临时且无效 的。不可重复读:对于两个事务A、B,A 读取 了一个字段,然后 B 更新 了该字段。A 再次读取 同一个字段,值就不同了。幻读:对于两个事务A、B, A 从一个表中 读取 了一个字段, 然后B 在该表中 插入 了一些新的行。...
2022-03-14 22:35:12
171
原创 MySQL事务(一)——事务的基本概念
定义:一组逻辑操作单元,使数据从一种状态变换到另一种状态。原则:保证所有事务都作为 一个工作单元 来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交,那么这些修改就永久地保存下来;要么MySQL将放弃所作的所有修改 ,整个事务回滚到最初状态。特点:原子性:指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚。一致性:指事务执行前后,数据从一个 合法性状态 变换到另外一个 合法性状态隔离性:事务的隔离性是指一个事.
2022-03-14 22:33:31
188
原创 MySQL性能优化(一)——索引失效的情况
最左前缀法则:情景:表student含有联合索引: create index idx_age_classid on student(age, classid);SQL:(1):explain select * from student where classid = 30该 SQL 不走索引,因为不满足最左前缀法则。因为表中的数据并不是依据classid 来排序的表中数据是在 age 排好序的前提下,classid 才是排好序的。如果只有 class...
2022-03-14 10:22:41
464
1
原创 MySQL性能分析工具(二)——explain的介绍
注:该SQL语句全部是针对于本地MySQL上的mysqlsenior数据库的 s1,s2表实例所用表的介绍s1 表:CREATE TABLE `s1` (`id` int(11) NOT NULL AUTO_INCREMENT,`key1` varchar(100) DEFAULT NULL,`key2` int(11) DEFAULT NULL,`key3` varchar(100) DEFAULT NULL,`key_part1` varchar(10...
2022-03-14 10:06:25
2385
原创 MySQL的性能分析(一)——性能分析工具的使用
查看性能参数:指令: show status like ' 参数 ' ;参数:(1):Connections:连接MySQL服务器的次数。(2):Uptime:MySQL服务端启动之后的上线时间。(3): Slow_queries:慢查询的次数。(4):Innodb_rows_read:Select查询返回的行数(5):Innodb_rows_inserted:执行INSERT操作插入的行数(6):Innodb_rows_updated:执行UPDATE操作更...
2022-03-14 09:54:54
936
原创 MySQL存储引擎(二)——不同存储引擎的比较
一: InnoDB 引擎:默认的存储引擎优点:(1):具备外键支持功能(2):InnoDB是事务型引擎 ,它被设计用来处理大量的短期事务。可以确保事务的完整提交和回滚。(3):除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。缺点:(1):相比MyISAM, InnoDB写的处理效率差一些 ,并且会占用更多的磁盘空间以保存数据和索引。(2):MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据, 对内存要求...
2022-03-14 09:52:11
272
原创 MySQL索引(六)——行格式
基本使用:概念:我们插入的一条条的记录都是按照一定的行格式插入到数据页中的相当于行格式就是我们插入的一条条记录,MySQL对其做了封装,成为了一个行格式。语法:CREATE TABLE 表名 ( 字段信息 ) CHARSET=ascii ROW_FORMAT =COMPACT;指定行格式为 compactCommpact行格式结构:变长字段长度列表:作用:MySQL支持一些变长的数据类型,比如VARCHAR(...
2022-03-13 10:54:32
549
原创 MySQL索引(五)——数据页
数据页的结构示意图:一:文件头:38字节组成结构:重点组成:FIL_PAGE_OFFSET:页号,可以简单理解为当前页的地址值FIL_PAGE_TYPE:当前页的类型FIL_PAGE_PREV,FIL_PAGE_NEXT:前、后指针,指向前一个和后一个数据页FIL_PAGE_SPACE_OR_CHKSUM:页的校验和(注:文件尾部分也有校验和,和文件头部分相等)校验和作用:检查的页的传输是否完整当我们的页从磁盘加载到内存中,如果数据再内存中发生了修改,那么页的
2022-03-13 10:44:44
1622
原创 MySQL索引(四)——不同存储引擎索引的对比
INNODB存储引擎:(1): 根节点不动B+Tree索引建立的具体流程如下:当表刚建立时,表中没有一个数据,此时只有一个数据页(根数据页),该页中没有任何的记录项。当我们不停的插入数据直到根数据页满了。此时如果再想插入数据,MySQL会新建两个数据页(A,B)。我们会将根数据页中的记录项全部移动到新建的数据页A中,根数据页变为索引页。要插入的数据 放入到新建的数据页 B 中(2):索引页中记录索引的唯一性当我们根据非主键字段建立索引时,难免不会出现某些索引值相等的情况,如下图.
2022-03-13 10:35:56
599
原创 MySQL索引(三)——常见索引概念
聚簇索引:索引文件和数据文件是在一起的使用举例:使用Innodb存储引擎建立的主键索引:示意图:如下图所示,我们的数据其实都是放在索引的叶子结点中。数据和索引是再一起存放的。非聚簇索引:索引文件和数据文件是分开的使用举例:Innodb的非主键索引,MyISAM的索引(主键和非主键索引都是非聚簇索引)示意图:(1):Innodb的非主键索引:注:非主键索引和主键索引的结构是相同的,唯一的区别在于叶子结点。 主键索引叶子结点存放的是一条条的数...
2022-03-13 10:14:10
825
原创 MySQL索引(二)——B+Tree索引
B+Tree:B-Tree索引的变种特点:(1):每个节点内部的数据都是递增的,每个节点也都是递增的区别:(2):非叶子节点不存放数据,只存放索引(3):叶子节点存放了所有的索引,并且存放了这些索引对应表中其他数据(4): 所有的叶子节点组成了一个双向循环链表B+Tree结构图:B+Tree的使用流程:以如下查询为例 select * from 表名 where id = 3;(1):MySQL会先把最上面的节点从硬盘加载到内存中...
2022-03-12 22:55:46
488
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人