![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Mysql
文章平均质量分 93
五度鱼Java
五度鱼学Java
展开
-
MySQL-MVCC(多版本并发控制)
当创建了上面的这张表,我们在查看表结构的时候,就可以显式的看到这三个字段。隐藏字段含义DB_TRX_ID最近修改事务ID,记录插入这条记录或最后一次修改该记录的事务ID。回滚指针,指向这条记录的上一个版本,用于配合undo log,指向上一个版本。DB_ROW_ID隐藏主键,如果表结构没有指定主键,将会生成该隐藏字段。而上述的前两个字段是肯定会添加的, 是否添加最后一个字段DB_ROW_ID,得看当前表有没有主键, 如果有主键,则不会添加该隐藏字段。原创 2022-09-25 22:31:43 · 6248 阅读 · 2 评论 -
MySQL-InnoDB引擎-架构和事务原理
当我们在一个事务中,执行多个增删改的操作时,InnoDB引擎会先操作缓冲池中的数据,如果缓冲区没有对应的数据,会通过后台线程将磁盘中的数据加载出来,存放在缓冲区中,然后将缓冲池中的数据修改,修改后的数据页我们称为脏页。缓冲池 Buffer Pool,是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度。而持久性是通过数据库的锁, 加上MVCC来保证的。原创 2022-09-25 20:50:11 · 9273 阅读 · 1 评论 -
MySQL-锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、 RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。MySQL中的锁,按照锁的粒度分,分为以下三类: 全局锁:锁定数据库中的所有表。表级锁:每次操作锁住整张表。行级锁:每次操作锁住对应的行数据。全局锁:锁定数据库中的所有表。原创 2022-09-25 16:04:52 · 7113 阅读 · 0 评论 -
MySQL-触发器
触发器是与表有关的数据库对象,指在之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。原创 2022-09-25 12:27:45 · 6927 阅读 · 0 评论 -
MySQL-存储过程
存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。封装,复用-----------------------> 可以把某一业务SQL封装在存储过程中,需要用到的时候直接调用即可。可以接收参数,也可以返回数据 –------> 再存储过程中,可以传递参数,也可以接收返回值。减少网络交互,效率提升 -原创 2022-09-25 12:08:11 · 7347 阅读 · 0 评论 -
MySQ-视图
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。原创 2022-09-24 20:23:33 · 7142 阅读 · 0 评论 -
MySQL-SQL优化
在之前的测试中,我们发现,如果数据量很大,在执行count操作时,是非常耗时的。MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;但是如果是带条件的count,MyISAM也慢。InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。原创 2022-09-24 20:01:50 · 7413 阅读 · 0 评论 -
MySQL-索引
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构 上实现高级查找算法,这种数据结构就是索引。索引结构描述B+Tree索引最常见的索引类型,大部分引擎都支持 B+树索引Hash索引底层数据结构是用哈希表实现的, 只有精确匹配索引列的查询才有效,不支持范围查询R-tree(空间索 引)原创 2022-09-24 15:58:49 · 8813 阅读 · 3 评论 -
MySQL-存储引擎
引擎就是发动机,是一个机器的核心组件。比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。而我们在选择 引擎的时候,需要在合适的场景,选择合适的存储引擎,就像在直升机上,我们不能选择舰载机的引擎 一样。而对于存储引擎,也是一样,他是mysql数据库的核心,我们也需要在合适的场景选择合适的存储引 擎。接下来就来介绍一下存储引擎。存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。原创 2022-09-23 21:02:24 · 7005 阅读 · 0 评论 -
MySQL-事务
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。😎😎😎就比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000。这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。原创 2022-09-23 17:45:42 · 6345 阅读 · 0 评论 -
MySQL-多表查询
多表查询就是指从多张表中查询数据。原来查询单表数据,执行的SQL形式为:select * from emp;那么要执行多表查询,就只需要使用逗号分隔多张表即可,例如: select * from emp , dept执行结果如下:此时,我们看到查询结果中包含了大量的结果集,总共102条记录,而这其实就是员工表emp所有的记录 (17) 与 部门表dept所有记录(6) 的所有组合情况,这种现象称之为笛卡尔积。SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。原创 2022-09-23 13:03:37 · 6906 阅读 · 0 评论