![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 94
Mrkang1314
这个作者很懒,什么都没留下…
展开
-
Mybatis源码解析(一)——Mybatis的核心组件
Mybatis的执行流程及核心组件各组件的作用:Configuration:用于描述Mybatis的主配置信息,其他组件可通过这个组件获取需要的配置信息;MappedStatement:用于描述Mapper中的SQL配置信息,是对Mapper XML配置文件中的sql标签或者Mapper接口中的sql注解配置信息的封装;SqlSession:为Mybatis提供的面向用户的API,表示和数据库交互时的会话对象,用于完成数据库的增删改查功能。SqlSession是Executor组件的外原创 2021-07-09 14:37:47 · 468 阅读 · 1 评论 -
Mysql工作原理——增删改类型undo日志格式介绍
事务回滚的需求:把为了回滚而记录的东西称为撤销日志,即undo日志。事务id给事务分配id的时机事务分为只读事务或者读写事务:只读事务中不可以对普通的表进行增、删、改操作,但可以对临时表做增、删、改操作。读写事务中可以对表执行增删改操作;如果某个事务执行过程中对某个表执行了增删改操作,那么InnoDB存储引擎就会给它分配一个独一无二的事务id。对于只读事务来说,只有在它第一次对某个用户创建的链式表执行增删改操作的时候才会为这个事务分配一个事务id,否则不分配。对于读写.原创 2021-02-22 13:53:14 · 1703 阅读 · 0 评论 -
Mysql工作原理——redo日志文件和恢复操作
redo日志刷盘时机log Buffer空间不足时log buffer 的大小是有限的,如果不停的往这个有限大小的log buffer里散入日志,很快就会被填满,如果当前写入log buffer的redo日志量已经占满了log buffer总容量的大约一半左右,就需要把这些日志刷新到磁盘上。事务提交时之所以使用redo日志主要是因为它占用的空间少,还是顺序写,在事务提交时可以不把修改过的Buffer Pool页面刷新到磁盘,但是为了保证持久性,必须要把这些页面对应的redo日志刷新到磁盘。后台线原创 2021-02-21 10:49:36 · 2139 阅读 · 3 评论 -
Mysql工作原理——redo日志概念及类别
redo日志InnoDB存储引擎是以页为单位来管理存储的,并且在真正访问页面之前,需要把磁盘上的页缓存到内存中的BufferPool之后才可以访问,但是数据库事务又强调持久性,就是对于一个已经提交的事务,在事务提交后即使系统发生崩溃,这个事务对数据库中所做的更改也不能丢失。假设在事务提交后突然发生了某个故障,导致内存中的数据都失效了,但是由于我们只在内存Buffer Pool中修改了页面,所欲导致数据丢失。解决这个问题最简单的方法就是在事务完成之前把该事务的所有页面都刷新到磁盘。但是这种做法有两个问题原创 2021-02-20 13:49:01 · 763 阅读 · 1 评论 -
Mysql —— InnoDB中的Buffer Pool
为了调节磁盘和CPU的效率,InnoDB存储引擎在处理客户端的请求时,当需要访问某个页的数据时,旧会把完整的页数据全部加载到内存中,在进行完读写后并不着急把该页对应的内存释放掉,而是将其缓存起来,这样将来有请求再次访问该页面时,就可以省去磁盘IO的开销。Buffer Pool 概述为了缓存磁盘的页,在Mysql服务器启动的时候就向操作系统申请一片连续的内存,起名为Buffer Pool(缓冲池),其大小可根据硬件配置决定。...原创 2020-12-14 17:18:21 · 329 阅读 · 0 评论 -
Mysql工作原理——基于规则的优化
Mysql依据一些规则将很糟糕的语句转换成某种可以比较高效执行的形式,这个过程被称为查询重写。条件化简移除不必要的括号((a = 5 AND b = c) OR ((a > c) AND (c < 5)))#化简后(a = 5 and b = c) OR (a > c AND c < 5)常量传递(constant_propagation)a=5 and b>a; #花间后a=5 and b>5;等值传递(equality_propagat原创 2020-12-03 15:30:23 · 354 阅读 · 0 评论 -
Mysql表连接原理
嵌套循环连接(Netsted-Loop Join)对于两表连接,驱动表只会被访问一遍,但是被驱动表却要访问好多遍,具体访问几遍取决于对驱动表执行单表查询后的结果集中的记录条数。对于内连接,选取哪个表为驱动表都没关系,而外连接的驱动表是固定的,也就是说左外连接的驱动表就是左边的那个表,而右外连接的驱动表就是右边那个表。两表连接的大致过程:选取驱动表,使用与驱动表相关的过滤条件,选取代价最低的单表访问方法来执行对驱动表的单表查询。对上一步中查询驱动得到的结果集中每一条记录都被分别到被驱动表中查找匹配.原创 2020-11-25 09:20:18 · 783 阅读 · 0 评论 -
单表访问方法
访问方法(access method)的概念我们平时所写的查询语句本质上只是一种声明式的语法,只是告诉Mysql我们要获取的数据符合哪些规则。之所以把Mysql执行查询的方式称为访问方法或访问类型,同一个查询语句可能使用多种不同的访问方法来执行,芮然最后查询结果都是一样的。CREATE TABLE single_table ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 INT, key3 VARCHAR(100),原创 2020-11-24 10:26:00 · 181 阅读 · 0 评论 -
Mysql工作原理——InnoDB的表空间
独立表空间结构区(extent)表空间中的页太多了,为了更好管理这些页面,设计者提出了区的概念,对于16KB的页来说,连续64个页就是一个区,也就是说一个区默认占用1MB空间大小。不论是系统表空间还是独立表空间,都可以看成是由若干个区组成的,每256个区被划分为一组:其中extent 0 ~ extent 255这256个区算是第一个组,extent 256 ~ extent 511这256个区算是第二个组,extent 512 ~ extent 767这256个区算是第三个组(上图中并未画全第三原创 2020-11-23 15:41:36 · 414 阅读 · 2 评论 -
Mysql工作原理——InnoDB数据页结构
数据页结构数据页代表这块16KB大小的存储空间可以被划分为过个部分,不同部分有不同功能:记录在页中的存储我们自己存储的记录会按照我们制定的航格式存储到User Records部分。但是在一开始生成页的时候,并没有这个部分,每当插入一条记录,都会从Free Space部分去申请一个记录大小的空间划分到User Records部分,当Free Space部分的空间全部被替代之后,也就意味着这个页使用完了,如果还有新的记录插入的话,就需要去申请新的页。记录头信息的秘密先创建一个表:mysql&原创 2020-11-16 14:32:43 · 571 阅读 · 0 评论 -
Mysql工作原理——InnoDB行格式、数据页结构
存储引擎负责对表中的数据进行读取和写入,常用的存储引擎有InnoDB、MyISAM、Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Memory都不用磁盘来存储数据。InnoDB存储引擎数据会存储到磁盘上,在真正处理数据时需要先将数据加载到内存,表中读取某些记录时,InnoDB存储引擎不需要一条一条的把记录从磁盘读出来;InnoDB读取数据的方式将数据划分为若干页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般是16KB,当需要从磁盘中读原创 2020-11-13 15:40:33 · 201 阅读 · 0 评论 -
Mysql工作原理——服务器与客户端
MySQL整个运行需要服务端与客户端的共同参与,运行着的服务器程序和客户端程序本质上都是是计算机上的一个进程,所以客户端进程向服务器进程发送请求并得到回复的过程本质上是一个进程间通信的过程。MySQL支持下面三种通信方式:使用TCP/IP协议通信;命名管道和共享内存Unix域套接字文件服务器处理客户端请求客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。连接管理客户端采用以上的通信方式来与服务器建立连接,每当有一个原创 2020-11-13 11:03:44 · 1586 阅读 · 0 评论 -
Spring Data JPA的使用
概念什么是JPAJPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供一种对象关联映射工具来管理Java应用中的关系数据,它的出现主要是为了简化现有持久化开发工作和整合ORM技术。Spring Data JPASpring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,可以让开发者用极简的代理即可实现对数据的访问和操作,提供包括增、删、改、查等在内的常用功能。Spring Data JPA其实就是s原创 2020-08-23 14:48:00 · 251 阅读 · 0 评论 -
Mysql事务和锁——常见问题总结
数据库事务隔离读未提交:一个事务可以读到另一个事务修改但是未提交的数据,会产生脏读、幻读;读已提交:一个事务可以读取到另一个事务修改并且提交了的数据;会产生幻读;可重复读:不会产生幻读,在一个事务中读取不到被别的事务修改了的数据,避免了幻读;串行化读:事务一个一个执行,同一个数据只能由一个事务来访问。每次读取都需要获得表级共享锁,读写相互都会阻塞。在InnoDB索引下,查询操作通过MVCC多版本并发控制来实现,事务修改数据后就会产生一个数据版本,版本之间使用指针形成版本链,存在一个ReadView原创 2020-07-17 16:32:08 · 492 阅读 · 0 评论 -
索引底层原理分析、索引实战
存储引擎负责对表中的数据进行读取和写入,常用的存储引擎有InnoDB、MyISAM、Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Memory都不用磁盘来存储数据。InnoDB存储引擎数据会存储到磁盘上,在真正处理数据时需要先将数据加载到内存,表中读取某些记录时,InnoDB存储引擎不需要一条一条的把记录从磁盘读出来;InnoDB读取数据的方式...原创 2019-05-25 10:59:26 · 500 阅读 · 0 评论 -
python网络爬虫——下载缓存(数据库)
数据库缓存介于磁盘缓存的限制,爬取到的数据量比较大,但又无任何复杂的连接,所以选用NoSQL数据库,这种数据库相比创痛的关系型数据库更容易扩展。 什么是NoSQL? NoSQL全称Not Only SQL,与传统的关系型数据库不同,NoSQL数据库通常是无模式的,考虑了跨服务器无缝分片问题。有多种方式可以实现该目标,分别是列数据存储(HBase)、键值对存储(Redis)、面向文档的数据库...原创 2018-08-17 09:04:49 · 547 阅读 · 0 评论 -
Django开发入门——数据库模型
为什么要用数据库? 在当代Web应用中,主观逻辑经常要涉及于数据库的交互。数据库驱动网站在后台连接数据库服务器,从中取出一些数据,然后在Web页面用漂亮的格式展示出来,这个网站也可能会向访问者提供修改数据库数据的方法。本质上,每个产品页面都是的数据库中的数据以HTML格式进行展现。 数据库配置 我们要告诉FDjango是用什么数据库以及如何连接数据库。和模板的配置一样,数据库的配置也在set...原创 2018-08-09 16:54:37 · 289 阅读 · 0 评论 -
python-数据库
python操作mysql数据库Python标准数据库借口为Python DB-APl,Python DB-APl为开发人员提供了数据库应用编程的借口。 DB-Apl是一个规范,它定义了一系列必须的对象和数据库存取方式,以便为各种各样的底层数据库系统和多数多样的数据库接口程序提供一致的访问接口。 DB-APl使用流程:引入APl模块。获取与数据库的连接执行SQL语句和储存的过程...原创 2018-04-18 17:57:08 · 528 阅读 · 0 评论 -
Linux-mysql(数据库)
1.安装数据库yum install mysql mysql-server跳过网络端口,防止被入侵。mysqladmin -uroot -predhat password westos 修改本地mysql root密码 mysqladmin -uroot -predhat -h 192.168.0.188 password westos 修...原创 2018-02-03 13:48:47 · 292 阅读 · 0 评论 -
ORM(对象关系映射)
什么是ORM? 对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库“。这种模式是为了解决面向对象与关系数据库存在的互不匹配的现象的技术。通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中去。 采用映射元数据来描述对象关系的映射,使得ORM中间件能够在任何一个应用的业...原创 2018-07-20 10:14:40 · 1440 阅读 · 0 评论 -
基于无线传输的温湿度采集系统上位机开发
运行环境Linux系统,Python语言实现功能从单片机串口接收采集到的温度和湿度,将数据存到数据库中,并实时显示在折线图上。使用软件Pycharm使用python库数据库层:pymysql数据可视化层:matplotlib串口通信层:pyserial实现流程串口通信模块串口所在位置:"/dev/ttyUSB0"波特率:9600超时时间:timeout=None,由于...原创 2018-11-13 10:25:13 · 4459 阅读 · 2 评论 -
JDBC——学习总结
概述是java语言操作数据库的api(应用程序编程接口)列举java.sql.*下的接口Connection:连接,代表java和数据之间的通道,桥梁;Statement:语句,可以用来执行sql语句;ResultSet:结果集,代表的是查询的结果;类DriverManager:工具类,获取连接对象;SQLException:异常对象,是Exception的子类型,属于检查异...原创 2018-12-23 23:05:59 · 221 阅读 · 0 评论 -
Mysql数据库引擎 InnoDB和MyISAM的区别和使用
本文参考:https://www.cnblogs.com/annsshadow/p/5355090.html索引概述本质:数据库维护某种数据结构以某种方式引用数据;索引取舍原则:索引的结构组织尽量减少查找过程中磁盘I/O的存取次数;为什么使用B/B+数主存读取:当系统需要读取主存时,则将地址信号放到地址总线上传给主存;主存读到地址信号后,解析信号并定位到指定存储单元,然后将...原创 2019-03-06 19:40:06 · 173 阅读 · 0 评论 -
Mysql数据库 B-tree索引、全文索引和哈希索引
B- tree索引存储引擎从索引的根节点开始进行搜索,通过结点槽中的指针向下层查找,比较节点页的值和要查找的值找到合适的指针进入下层子节点。使用场景:- 全值匹配:和所有列进行匹配;- 匹配最左前缀;- 匹配列前缀;- 匹配范围值;- 精确匹配某一列并范围匹配另一列;- 只访问索引的查询;使用限制:- 如果不是按照索引得最左列开始查找,则无法使用索引;- 不能跳过索引中的列...原创 2019-03-11 13:57:57 · 388 阅读 · 0 评论 -
面试题总结 数据库问题
数据库1. MySQL 索引使用的注意事项数据库索引使用了空间换取时间,会占用额外存储;索引提升查询性能的同时,影响数据的增删改;null值不适合做索引,要加索引的列一般添加not null约束,并给一个默认值;列的取值越唯一,区分度越高,越适合做索引;mysql主键索引(聚簇索引,把这一行的值都存储到叶子节点上)和普通索引(只存储了主键的值),查询普通索引时,如果select的列...原创 2019-03-11 15:21:56 · 256 阅读 · 0 评论 -
Mysql事务以及锁原理、死锁及解决方法
select for uodate打开两个mysql客户端;创建两张表,并且都插入几条用于测试的数据;create table client1( clientId int(2), sex int(2), name int(2) );create table client2( clientId int(2) primary key , sex int(2), name int...原创 2019-03-25 21:55:13 · 1326 阅读 · 0 评论 -
Mysql中的索引详解
explain用法explain是用来显式mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句。字段含义possible_keys:显式可能应用在这张表的索引,如果为空,没有可能的索引;key:实际使用的索引,如果为空,表示没有使用索引;key_len:使用的索引长度,在不损失精确性的情况下,长度越短越好;ref:显示索引的哪一列被使用...原创 2019-04-10 15:54:53 · 230 阅读 · 0 评论 -
MongoDB——初识
NoSQL什么是NoSQL? NoSQL指的是非关系型数据库。是对不同于传统的关系数据库的数据管理系统的统称。 RDBMS(关系型) vs NoSQL(非关系型) RDBMS 高度组织化结构化数据结构化查询语言数据和关系都存储在单独的表中数据操纵语言严格的一致性基础事务 NoSQL代表着不仅仅是SQL没有声明查询语言没有预订定义的模式键-值对存储,列存储,文...原创 2018-08-22 21:47:43 · 238 阅读 · 0 评论