InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构 缓存磁盘上的数据,方便快速读取,同时在对磁盘文件的数据修改之前在这里缓存 重做日志(redo log)缓冲 而后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最新的数据。此外将已经修改的数据文件刷新到磁盘文件。同时还要保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态。 InnoDB的简单的体系结构图如下所示: 后台线程 InnoDB存储引擎是多线程…

2021年10月12日 0条评论 908点热度 0人点赞 agedcat_xuanzai 阅读全文

构成MySQL数据库和InnoDB存储引擎表的各种类型的文件可以分为以下类型: 参数文件:告诉MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置; 日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件,如错误日志,二进制日志文件,慢查询日志文件,查询日志文件等; socket文件:当用UNIX域套接字方式进行连接时需要的文件; pid文件:MySQL实例的进程ID文件; MySQL表结构文件:用来存放MySQL表结构定义文件; 存储引擎文件:因…

2021年10月12日 0条评论 1160点热度 1人点赞 agedcat_xuanzai 阅读全文

开发多用户,数据库驱动的应用时,最大的一个难点是:一方面要最大程度的利用数据库的并发访问,另一方面还要确保每个用户能以一致的方式读取和修改数据,为此就有了锁机制。同时这也是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问,InnoDB存储引擎会在行级别上对表数据上锁。 myisam引擎不支持行锁,只支持表锁,并发情况下的读没有问题,但是并发插入时的性能就要差一些了。 InnoDB存储引擎的实现和Oracle数据库非常类似,提供一致性的非锁定读、行级锁支持。行级锁没有相关额外的开销,并可以同…

2021年10月12日 0条评论 726点热度 0人点赞 agedcat_xuanzai 阅读全文

事务概述 事务是数据库中的一个重要概念,也是数据库系统区别于文件系统的重要特性之一。事务是访问并更新数据库中各种数据项的一个程序执行单元。事务可由一条SQL语句组成,也可以由多条SQL语句组成。事务会把数据库从一种一致状态转换到另一种一致状态。在数据库提交工作时,可以确保要么所有的修改都已经完成了,要么所有的修改都没有做,并且保存了事务开始前的状态,以便可以回到开始的状态。 事务包含四个(ACID)特性: 原子性(atomicity) 原子性是指事务是一个不可分割的执行单元。只有使事务中所有的数据库操作都执行成功,…

2021年9月1日 0条评论 1026点热度 1人点赞 agedcat_xuanzai 阅读全文

事务的隔离性的提出是为了保证在多用户并发的时候不出现问题,这也就是说如果不保证事务的隔离性的话一定会出现问题。事实上,事务的隔离级别划分为: 读未提交(READ UNCOMMITTED) 读提交 (READ COMMITTED) 可重复读 (REPEATABLE READ) 串行化 (SERIALIZABLE) 除了最后一个级别串行化外,其他级别都会出现一些问题。 需要解决的问题 脏读 脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并…

2021年9月1日 0条评论 1654点热度 2人点赞 agedcat_xuanzai 阅读全文

InnoDB存储引擎在可重复读的隔离级别下解决了幻读问题,实现的方式正是多版本并发控制。多版本并发控制对读这个操作进行了优化,对写操作仍然是通过加锁来保证隔离性的,这样解决了读写冲突的问题。 多版本并发控制(MVCC) 是通过保存数据在某个时间点的快照来实现并发控制的。也就是说,不管事务执行多长时间,事务内部看到的数据是不受其它事务影响的,根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。 简单来说,多版本并发控制 的思想就是保存数据的历史版本,通过对数据行的多个版本管理来实现数据库的并…

2021年8月22日 0条评论 1194点热度 1人点赞 agedcat_xuanzai 阅读全文

在数据库的实际使用过程中,我们常常会遇到不希望数据被同时写或者读的情景,也就是读写冲突问题,例如秒杀场景下,两个请求同时读到系统还有库存1个,然后又先后把库存更新为0,这时候就会出现超卖的情况,这时候货物的实际库存和我们的记录就会对应不上了。 为了解决这种资源竞争导致的数据不一致等问题,我们需要有一种机制来进行保证数据的正确访问和修改,而在数据库中,这种机制就是数据库的并发控制。其中乐观并发控制,悲观并发控制和多版本并发控制是数据库并发控制主要采用的技术手段。 悲观并发控制 本质 维基百科:在关系数据库管理系统里,…

2021年8月22日 0条评论 1359点热度 1人点赞 agedcat_xuanzai 阅读全文

前两天面试的时候碰到了SQL查询命令,让查询综合成绩2到4名的学生学号,一下子蒙住了。 下来赶紧整理一下,发现mySQL好坑啊!!! 来一张可爱的猫咪图缓解一下郁闷的心情。 废话不多说。 首先给了一个很典型的学生成绩数据表: 成绩表: score(s_id,c_id,s_s_score) –学生编号,课程编号,分数 我们在数据库里面创建表并且写入数据: -- 1 创建表格 create table if not exists score ( s_id VARCHAR(20) not null, c_id VARCH…

2021年3月19日 0条评论 838点热度 1人点赞 agedcat_xuanzai 阅读全文