- 博客(26)
- 收藏
- 关注
原创 从新手到高手的蜕变:MySQL 视图进阶全攻略
可以将其视为一个预定义的查询,当执行针对视图的操作时,MySQL 会根据视图的定义从基表中动态检索数据。如果视图 view_name 不存在,它将按照 select_statement 的内容创建一个新的视图,如果视图 view_name 已经存在,它将使用 select_statement 中的内容替换原视图的定义。如果有多个嵌套视图,它会从当前视图开始,检查当前视图和所有上层视图的 WHERE 条件。:当基表的结构发生变化时,只需相应地修改视图的定义,而不需要修改使用该视图的应用程序。
2025-01-23 14:33:35
2126
原创 从新手到高手的蜕变:MySQL 约束进阶全攻略
如果你正在使用MySQL进行数据管理,那么你一定知道,高效的数据库管理离不开对数据的严格约束。约束不仅可以帮助我们避免数据错误,还能提高数据的查询效率,优化数据库的性能。无论是小型的个人项目,还是大型的企业级应用,掌握MySQL约束都是至关重要的。接下来,我们将详细介绍MySQL中的各种约束类型及其应用场景,让你轻松成为数据库管理的高手。约束:是确保数据库数据完整性、一致性的规则,限制数据操作,像主键约束保证记录唯一标识,外键约束关联表间数据,唯一约束保证列值唯一等。索引。
2025-01-15 14:32:19
407
原创 【innodb 阅读笔记】之 数据页结构介绍
此前我们了解到,在 InnoDB 存储引擎中,页是管理数据库的最小磁盘单位,其中 b-tree Node 页存放着表中的实际行数据。接下来,让我们深入底层,一探 InnoDB 数据页的内部存储结构,这对理解其工作原理与数据库高效运行机制意义重大。
2024-12-23 14:53:02
1194
原创 【innodb阅读笔记】之 CHAR 的行结构存储
上述例子清楚的显示了 Innodb 存储引擎内部对 char 类型在多字节字符集类型的存储,char 被明确视为变长字符类型,对于未能占用满长度的字符还是用 0x20 填充。因此,在多字节字符集的情况下,char 和 varchar 的实际行存储基本是没有区别的。
2024-12-17 15:43:12
253
原创 【innodb阅读笔记】之 行格式(Dynamic)
Innodb 1.0 版本开始引入了新的行格式 dynamic,新的行格式在存放 blob 中的数据采用了完全行溢出的方式,在数据页中只存放 20 字节的指针,实际数据都存放在 Off page 中,而 compact 会存放 768 个前缀字节。
2024-12-16 15:31:47
1941
原创 【Innodb阅读笔记】之 本地搭建多个MYSQL
在开展工作与学习任务的进程中,时常会涉及到运用多个 MySQL 实例执行特定操作的需求。例如,在深入研习主从复制机制时,借助多个 MySQL 实例能够更为直观地观察数据的传输与同步过程,有效加深对其原理及应用场景的理解。同时,于数据库备份工作方面,利用多个实例可以灵活地制定备份策略,实现全量备份与增量备份的有机结合,从而确保数据的安全性与完整性,提升数据管理的可靠性与高效性。
2024-12-12 10:44:45
566
原创 【Innodb阅读笔记】之行溢出数据
在前面我们介绍行格式的时候,对于变长的字段,小于 255 字节用 1 个字节记录长度,大于等于 255 字节用 2 字节记录长度,对应当前字段明显需要使用 2 字节记录,所以,剩余两个字节用于记录字段长度。当然既然用户使用了 BLOB 类型,一般不会存放这么小的数据,因此大多数情况下 BLOB 的行数据还是会发生溢出,实际数据保存在 BLOB 页中,数据页只保存数据的前 768 个字节。所以,对于 varchar(N) 中 N 指的是字符的长度,而对于 varchar 最大长度的支持,单位是字节。
2024-12-11 15:18:36
1114
原创 【Innodb阅读笔记】之行记录格式(Redundant)
在 MySQL 5.0 版本之前,Innodb 采用 Redundant 这种行记录存储方式。MySQL 之所以仍保留对 Redundant 的支持,关键在于要确保与旧版本页格式的兼容性,以此维系数据库在不同版本更迭期间的平稳过渡与数据连贯性。值得一提的是,Redundant 行记录格式自身还具备不少独特优点,使其在当时发挥了重要作用。其一,Redundant 格式有着出色的稳定性。
2024-12-09 15:28:29
1094
原创 【innodb阅读笔记】之 Innodb行记录格式 (Compact 行格式)
innodb 存储引擎同大多数数据库一样,记录是以行的形式存储的。这意味着页中保存的一行行的数据。
2024-12-06 15:48:25
751
原创 【innodb阅读笔记】之 索引组织表
在Innodb存储引擎中,表都是根据主键索引的顺序组织存放的,这种存放方式的表称为索引组织表,在innodb存储引擎表中,每个表都有一个主键,如果在创建表的时候没有显示的定义主键,则innodb会按如下方式选择或创建主键:1. 首先判断表是否有非空唯一索引,如果有,则该列为主键,若过有多个唯一非空索引,则按照定义顺序,选择第一个为主键2. 如果不符合上述条件,innodb存储引擎自动创建一个6字节大小的指针。
2024-12-05 14:27:39
731
原创 【innodb阅读笔记】之 表空间文件、重做日志文件
innodb 采用将存储的数据按照表空间进行存放的设计。默认情况下会初始化一个大小为10MB,名为ibdata1的文件,该文件就是默认的表空间文件,可以通过参数这里使用ibdata1和ibdata2两个文件来组成表空间,若这两个文件在不同磁盘,磁盘的负载可能均衡,因此提高数据库性能。设置后,所有的数据都会记录到表空间文件中,这会导致表空间文件过大,所以引入了参数,当开启此参数后(默认是开启的),数据库会为每个表设置一个独立的表空间文件,命名规则为:表名.ibd,通过这样的方式,减少共享表空间的大小。
2024-11-28 14:32:30
580
原创 【Innodb阅读笔记】之 二进制文件应用,主从复制搭建
MySQL的主从复制(Master-Slave Replication)是一种数据复制解决方案,将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而是的从库和主库的数据保存同步。MySQL支持将数据从一个MySQL服务器(主服务器)复制到一个或多个其他MySQL服务器(从服务器),从库同时也可以作为其他从服务器的主库,实现链状复制。
2024-11-26 15:34:35
1060
原创 【Innodb阅读笔记】之 二进制文件
1. 开启二进制日志会损失1%的性能2. 通过参数 log-bin 开启二进制3. 通过 max_binlog_size、binlog_format 、sync_binlog、binlog_cache_size等一些参数来控制和影响二进制4.二进制文件可以用来 恢复 、复制 数据,可以用来做主从复制、读写分离等一些操作。
2024-11-21 17:27:11
1164
原创 【Innodb阅读笔记】之 错误日志、慢查询日志、查询日志
在 mysql 中,我们可以在启动、运行过程发生错误时,可以通过错误日志来分析问题。当sql运行过慢,可以开启慢查询日志来分析问题。查询日志在 mysql 中使用的比较少,但当我们需要记录SQL语句时,可以开启来记录sql信息。
2024-11-18 11:29:16
469
原创 【Innodb阅读笔记】之 参数文件、pid文件、frm文件
mysql在启动的时候,数据库会先读取一个配置文件,用来文件存储的位置以及启动需要初始化的一些参数。mysql的存储文件是以文本的形式存储的,可以通过文本编辑器直接修改。例如springboot 中的 yml 文件。 mysql中的参数是一个个的( k - v )键值对,例如,innodb_buffer_pool_size=1G, key 就是innodb_buffer_pool_size, val是1G,这就是键值对,在mysql中,我们可以通过 SHOW VARIABLES LIKE 'i
2024-11-13 11:34:06
351
原创 【Innodb阅读笔记】之 关闭、启动、恢复
innodb关闭时,通过:在数据库关闭时,需要完成所有的 full purge 和 merge insert buffer,并将所有的脏页都刷新到磁盘。这需要一些时间,有时需要几个小时。如果我们要进行mysql升级,必须将此参数设置为 0,然后关闭数据库:不需要完成 full purge 和 merge insert buffer操作,但是会将脏页刷新到数据库,
2024-11-07 17:23:40
1179
原创 【Innodb阅读笔记】之 异步IO、刷新邻接表
当在刷新一个脏页,数据库会检查该页所在区的所有页,如果是脏页,那么一起刷新。通过AIO将多个操作合并为一个操作,提高数据数据库性能。例如,我们在去超市买菜的时候,会看一看家里是否有什么缺少的,顺便一起买回来,减少区超市的次数。这需要考虑下面两个问题:是不是将不怎么脏的页进行了写入,而该页有很快变成脏页。(买的菜很快就吃完了)固态硬盘有较高的IOPS,是否还需要这个性能(超市就在楼下)
2024-11-05 10:12:38
284
原创 【Innodb阅读笔记】之自适应哈希索引
在innodb存储引擎中,innodb存储引擎会监听对表上各个页的查询,当观察到其中某个页是热点数据(访问次数满足条件),则自动为数据页建立哈希索引。此操作不需要人为操作,是innodb存储引擎自动完成的,所以称为自适应哈希索引。1. innodb存储引擎引入AHI作为查询数据页的缓存,想降低查询数据页的成本2. AHI的"自适应"想解决的问题是 缓存不能太大,也不能太小3. AHI建立的过程中,通过不断限制条件,只为经常使用的索引和经常使用的数据页建立缓存。
2024-11-04 11:19:09
873
原创 【Innodb阅读笔记】之两次写(doublewrite)
InnoDB存储引擎的page大小一般是16KB,其数据校验也是针对这16KB来计算的,将数据写入到磁盘是以page为单位进行操作的。我们知道,由于文件系统对大多数情况下不是原子操作,16KB的数据,写入4KB时,这意味着如果服务器宕机了,只有一部分写是成功的。这种情况下就是partial page write问题。例如,我们在记笔记的时候,写到一半的时候笔没油了,此时这个笔记是不完整的。
2024-10-29 14:17:26
669
原创 【innodb阅读笔记】之通过独立表空间恢复数据表
要想通过独立表空间恢复数据,数据库必须设置为开启独立表空间,通过参数设置,5.7版本默认开启独立表空间。
2024-10-21 15:35:52
527
原创 【innodb阅读笔记】之Insert Buffer插入缓存
在 innodb 存储引擎中,主键是行的唯一标识。通常应用程序中记录的插入顺序是按照注解递增的顺序进行插入的,因此,插入聚集索引一般是顺序的,不需要磁盘随机读取。比如:其中,a是自增长的,同时页也是按照a的顺序进行排序的,一般情况下,不需要额外读取一个页的记录,因此,对于这一类查询,速度是非常快的。但是一个表不是只有聚集索引,更多的情况下,一个表有多个非聚集的辅助索引,所以,表的定义为:key(b)
2024-10-17 16:44:55
757
原创 【mysql阅读笔记】之Master Thread工作方式
同时,我们发现,当磁盘压力不管大不大的时候,每次都回收100个脏页、合并5个插入缓存,没有考虑到磁盘IO吞吐量的情况,举个例子,每个饭店的情况和老板不同,有的老板打算卫生快,有的老板打算卫生慢,快的多弄,慢的少弄,而不是固定打扫卫生。然后,当脏页比例为90%,才刷新脏页。这就相当于饭店都是没打扫的桌子10个有9个是脏的,老板才会打扫,脏桌子占用比例太大,老板决定7个桌子脏了的时候就打扫。在说Master Thread是怎样工作之前,举一个例子,一家饭店,只有老板自己,在人多的时候,老板只顾得上收银、上菜。
2024-10-15 16:47:05
287
原创 【innodb引擎阅读笔记】之 Checkpoint技术
checkpoint是用来将缓存池的数据刷新到磁盘当中的,具体怎么刷的,先举一个生活中的例子,比如:有一个饭店,里面有一个饭店老板,一个软件、软件记录着顾客和可擦除的笔记本。当顾客来吃饭,消费一次金额,老板就需要找到这个顾客,然后从记录扣除消费金额,但是,软件比较垃级,老板每次查找顾客,都需要从开始一个一个的找顾客,人少的时候还行,人多了老板就有点忙不过来了。后来,老板想了一个新办法,每次有顾客来消费的时候,老板就先在脑子里记着顾客花了多少钱,等顾客要走时。
2024-10-12 16:16:10
1215
原创 【mysql阅读笔记】之缓存池原理
缓存池是一块内存区域,在数据库读取数据的时候,先将读取到的页放入缓存池中,下次再读取的时候,直接从缓存池中获取,减少访问磁盘的次数,通过内存的速度弥补磁盘速度较慢对数据库的影响。对应数据库的修改操作,则首先修改缓存池中的页,被修改的页称之为脏页,然后再以一定的频率刷新到磁盘中。为什么不修改完直接刷新?因为怕刚刷新完再次修改,再次进行刷新。同样,这也是为了提高数据库的性能。
2024-10-11 15:00:38
1054
原创 【Mybatis】Mybatis拦截器+注解,实现敏感数据自动加解密
1. 需要用到sql对数据库进行直接解密,同时又比较安全,第一个想到的是使用mysql自带的AES对数据进行加密。3. 数据只需要在入库层进行加解密,上层业务调用不需要再考虑敏感数据的加解密问题。2. 可以通过sql查询对数据进行解密(通过密钥直接对数据库加密参数进行解密)3. 系统需要重新测试,防止人为因素导致sql修改错误(粗心导致的sql异常)1. 通过程序实现数据加密解密 (快速便捷,尽量减少对原先代码的修改)2. 对代码减少修改,想到使用mybatis拦截器实现,对。3. 数据库:mysql。
2024-09-29 11:28:13
2216
4
原创 [mysql 源码笔记] 主线程master thread源码分析
1. master thread 线程主要工作是刷新日志、保证数据的一致性、脏页的刷新、合并插入缓存、undo页回收(唤醒回收线程page thread),2. page cleaner Thread每隔一秒回收一次脏页数据,检查master thread线程的压力。
2024-09-26 14:56:08
629
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人