MySQL
文章平均质量分 93
緑水長流*z
一个专注于编写自学教程的博主;热衷于分享当下热门的技术~
展开
-
深入分析MySQL事务日志-Undo Log日志
引入Undo Log Buffer是来提升Undo Log的性能的,比较操作内存要比操作磁盘快多了,但由此也引入了另外一个问题,那就是既然内存中记录了Undo Log的值,为什么还要在磁盘中也记录Undo Log的值呢?Tips:Undo Log主要保证事务的原子性,即通过记录修改前的状态,以提供回滚功能,其次Undo Log用于提供MVCC的快照读。,每个事务只会使用一个回滚段,当一个事务开始的时候,会制定一个回滚段,在事务进行的过程中,当数据被修改时,原始的数据会被复制到回滚段。原创 2024-09-24 13:17:39 · 3565 阅读 · 0 评论 -
深入分析MySQL事务日志-Redo Log日志
事务的隔离性是通过锁实现,而事务的原子性、和持久性则是通过事务日志实现。在MySQL中,事务日志分为两类,一个是Redo Log,也叫重做日志,另一个是Undo Log,也叫回滚日志;其中Redo Log保证事务的,Undo Log保证的是事务的;原创 2024-09-24 13:14:56 · 1127 阅读 · 0 评论 -
全面深入理解MySQL自增锁
MySQL的自增锁是指在使用自增主键(Auto Increment)时,为了保证唯一性和正确性,系统会对自增字段进行加锁。这样可以确保同时插入多条记录时,每条记录都能够获得唯一的自增值。原创 2023-07-19 19:03:56 · 10319 阅读 · 3 评论 -
详细剖析MySQL临键锁
临键锁(Next-Key Lock):临键锁是查询时InnoDB根据查询的条件而锁定的一个范围,这个范围中包含有间隙锁和记录数;**临键锁=间隙锁+记录锁**。其设计的目的是为了解决Phantom Problem(幻读);主要是阻塞insert,但由于临键锁中包含有记录锁,因此临键锁所锁定的范围内如果包含有记录,那么也会给这些记录添加记录锁,从而造成阻塞除insert之外的操作;Tips:**临键锁的主要目的,也是为了避免幻读(Phantom Read)。如果把事务的隔离级别降级为RC,临键锁则也会失效原创 2023-07-17 15:05:31 · 19702 阅读 · 13 评论 -
MySQL意向锁的探究
**意向锁的存在是为了协调行锁和表锁的关系,用于优化InnoDB加锁的策略**。**意向锁的主要功能就是:避免为了判断表是否存在行锁而去全表扫描**。意向锁是由InnoDB在操作数据之前自动加的,不需要用户干预;- 意向共享锁(IS锁):事务在请求S锁前,要先获得IS锁- 意向排他锁(IX锁):事务在请求X锁前,要先获得IX锁场景举例(假设此时没有意向锁):假设事务A锁住了表中的**一行**记录,之后,事务B申请**整个表**的写锁。数据库需要避免这种冲突,需要让B的申请被阻塞,直到A释放了行锁原创 2023-07-17 14:51:28 · 9522 阅读 · 0 评论 -
数据库控制语言DCL(Data Control Language)详细用法
DCL (Data Control Language) 4.1 用户管理 我们现在默认使用的都是root用户,超级管理员,拥有全部的权限。但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的原创 2023-04-03 19:22:54 · 7681 阅读 · 1 评论 -
到底什么才是幻读?
概念:一次事务多次读取到的条数不一致而引发的问题;**在InnoDB(暂时理解是MySQL)中幻读在很多地方都得到了解决,但在一些特殊的情况下,还是会引发幻读问题;****为什么有的情况下能解决,有的情况下解决不了?因为一次事务多次读取到的条数不一致会导致有很多情况发生!**原创 2023-03-05 13:24:26 · 1117 阅读 · 0 评论 -
MySQL执行计划(MySQL调优的重要利器)
MySQL执行计划项目开发中,性能往往都是是我们重点关注的问题,其实很多时候一个SQL往往是整个请求中瓶颈最大的地方,因此我们必须了解SQL语句的执行过程、数据库中是如何扫描表、如何使用索引的、是否命中索引等信息来帮助我们做SQL语句的优化。MySQL提供了explain/desc语句,来显示这条SQL语句的执行计划,执行计划可以帮助我们查看SQL语句的执行情况,我们可以根据反馈的结果来进行SQL的优化。准备测试数据use test;CREATE TABLE `test`.`role` (原创 2020-11-13 11:13:21 · 3691 阅读 · 7 评论 -
MySQL索引数据结构底层(全)
一、索引概述索引是帮助数据库快速查询数据的一种数据结构,在数据库中,数据库系统除了存储数据之外还维护着一种特殊的数据结构,这种数据结构以某种方式指向数据,这样就可以在这种数据结构上实现高级算法来查询数据,这种数据结构就是索引。索引是啥?索引就是帮助我们快速查找数据的一种数据结构!没毛病!索引示意图:我们来直观的感受一下,有建立索引和没有建立索引的直观感觉如图所示,索引能够帮我们快速的定位到数据的具体位置,高效查询。一般来说,索引本身也很大,不可能全部存储在内存当中,因此索引往往以索引文件原创 2020-08-07 15:39:01 · 6700 阅读 · 4 评论 -
什么是MySQL的预编译?
一、什么是MySQL的预编译?通常我们发送一条SQL语句给MySQL服务器时,MySQL服务器每次都需要对这条SQL语句进行校验、解析等操作。但是有很多情况下,我们的一条SQL语句可能需要反复的执行,而SQL语句也只可能传递的参数不一样,类似于这样的SQL语句如果每次都需要进行校验、解析等操作,未免太过于浪费性能了,因此我们提出了SQL语句的预编译。所谓预编译就是将一些灵活的参数值以占位符?的形式给代替掉,我们把参数值给抽取出来,把SQL语句进行模板化。让MySQL服务器执行相同的SQL语句时,不需要原创 2020-07-10 22:06:08 · 9523 阅读 · 5 评论 -
MySQL索引失效全部场景(看完这个你还不会使用索引?)
我们知道提升MySQL性能的两大利器,分别为索引、锁。本片文章主要围绕索引的使用原则进行深入讲解,包括索引匹配原则、索引失效等。看完本篇文章你能学到什么?1、索引匹配的基本原则2、最左前缀法则3、索引的全值匹配4、索引的最佳优化方案5、以后在公司写SQL不会那么随意了~~~~~~阅读本片文章需要具备MySQL执行计划相关知识(关于MySQL执行计划可以看我的另外一篇文章:MySQL执行计划)1.1 数据准备创建测试表:CREATE TABLE `userinfo` (原创 2020-09-09 17:40:05 · 1828 阅读 · 10 评论 -
事务隔离级别精讲(为小白量身定做)
一、事务的应用事务很大程度上保障了我们业务操作的安全性。因此在很多安全性较高的场合我们都需要借助事务来帮我们完成。1.1 MySQL的事务MySQL中可以有两种方式进行事务的操作:1)手动提交事务2)自动提交事务(MySQL默认)查看当前MySQL是否是自动提交事务:show variables like 'autocommit';No(1):开启自动提交事务(默认值)OFF(0):关闭自动提交事务设置手动提交事务(关闭自动提交事务):set autocommit=0;原创 2020-06-08 09:57:31 · 596 阅读 · 2 评论 -
SQL语句优化(落实到代码,不绕弯子)
SQL语句优化本篇内容全部围绕SQL语句如何优化,告诉大家实际的优化手段(落实到代码),不绕弯子。注: 阅读本篇文章需要具备执行计划、索引失效等相关知识。创建一张测试表,用于后期测试使用:CREATE TABLE `userinfo` ( `id` int(10) NOT NULL COMMENT '用户id', `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL CO原创 2020-06-08 08:57:35 · 5150 阅读 · 6 评论 -
如何跟女朋友解释清楚什么是事务?
一、什么是事务?1.1 业务和事务业务可以理解为公司/老师交给我们的任务,各种各样、意想不到、花里胡哨。。。。我们来举例几个场景1.1.1 业务场景一完成一个商品购买业务操作如下:1)查询到某件商品,在此期间商品的浏览量等增加2)选择购买数量、下单3)跳出二维码页面,扫码,付款4)输入密码,完成下单,数据库中插入订单记录。此时用户可以查询到刚刚下的订单情况5)商家钱到账(假设没有中间物流操作)。看似很完美??殊不知其中会出现非常非常非常多的问题!问题一:我查询到了某件商品,并且点原创 2020-06-05 16:01:52 · 2178 阅读 · 0 评论 -
MySQL临时表详细解释
MySQL临时表详细解释1.1 临时表简介MySQL临时表在很多场景中都会用到,比如用户自己创建的临时表用于保存临时数据,以及MySQL内部在执行复杂SQL时,需要借助临时表进行分组、排序、去重等操作。临时表的作用仅限于本次会话,等连接关闭后重新打开连接临时表将不存在。1.2 临时表类型1.2.1 外部临时表通过create temporary table语句创建的临时表为外部临时表,在创建时可以手动指定临时表的存储引擎。create temporary table temp_table( i原创 2020-06-04 17:08:44 · 22434 阅读 · 1 评论 -
MySQL存储引擎深入理解
一、什么是存储引擎1.1 存储引擎概述数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是插件式存储引擎。Oracle,SQL Server等数据库只有一种存储引擎。MySQL提供了插件式的存储引擎架构。所以MySQL存在多种存储引擎,可以根据需要使用相应引擎,或者编写存储引原创 2020-06-04 14:27:48 · 2146 阅读 · 1 评论 -
MySQL缓存深入理解(全网最深、最全、最实用)
看完这篇博客你能学到什么?1、MySQL的架构2、SQL语句在MySQL中执行的完整过程3、MySQL缓存相关知识。掌握缓存相关参数含义。懂得MySQL缓存调优。4、懂得MySQL缓存命中规则、失效场景。在缓存上的舍取。5、掌握MySQL压力测试工具mysqlsalp工具的使用,能够使用mysqlsalp测试MySQL并发响应值6、在高并发情况下,缓存频繁失效对性能的影响。请耐心读完,对你绝对有帮助!MySQL缓存深入理解学习MySQL缓存之前,我们首先得了解一下MySQ原创 2020-06-04 09:50:56 · 11802 阅读 · 2 评论 -
MyISAM引擎压缩工具myisampack
MyISAM引擎压缩工具myisampack本文主要是针对于《MySQL优化实战-存储引擎》的补充,有兴趣可以查看这篇文章,了解MySQL存储引擎的详细知识。我们知道MyISAM存储引擎表提供有三种,分别为静态表、动态表、压缩表。(本文主要讲压缩表)1.1 数据准备准备一张测试表(存储引擎是MyISAM):CREATE TABLE `userinfo` ( `id` int(10) NOT NULL COMMENT '用户id', `username` varchar(50) CHAR原创 2020-06-03 12:40:41 · 799 阅读 · 1 评论 -
MySQL服务器常用命令(带你如何去查询MySQL自带的官方资料)
本篇到这里就结束了,在这里提一下,我个人认为:很多软件都带有官方文档,包括redis手册、Java的jdk文档等,手册是给那些已经会了的人看的,他们忘记,看下手册就能回想起完整的语法,不是给那些完全不懂的人看的,我相信没有人是跟着手册从0到1学习的(学霸大佬勿喷)。因此手册只是作为参考作用。...原创 2020-06-03 09:57:35 · 1415 阅读 · 0 评论 -
MySQL存储过程和存储函数
MySQL存储过程和存储函数MySQL中提供存储过程与存储函数机制,我们先将其统称为存储程序,一般的SQL语句需要先编译然后执行,存储程序是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,当用户通过指定存储程序的名字并给定参数(如果该存储程序带有参数)来调用才会执行。1.1 存储程序优缺点优点通常存储过程有助于提高应用程序的性能。当创建,存储过程被编译之后,就存储在数据库中。 但是,MySQL实现的存储过程略有不同。 MySQL存储过程按需编译。 在编译存储过程之后,MySQL将其放原创 2020-05-24 08:20:25 · 62060 阅读 · 8 评论 -
Centos7安装MySQL详细步骤
Centos7 安装MySQL详细步骤首先在虚拟机中安装一个Centos7(VM虚拟机安装Centos7)1.1 MySQL安装1.1.1 下载wget命令yum -y install wget1.1.2 在线下载mysql安装包wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm1.1.3 安装MySQLrpm -ivh mysql57-community-release-el7-8.noar原创 2020-05-22 22:41:23 · 62623 阅读 · 90 评论 -
MySQL视图全面详解
视图(View)是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。视图其实就是一个select返回的结果集,用于方便我们查询而创建的"临时表",简化我们的查询语句。视图的优势**简单:**使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。**安全:**使用视图的用户只能访问他们被允原创 2020-05-20 23:53:45 · 5019 阅读 · 1 评论 -
The server time zone value '�й���ʱ��' is unrecognized 错误详解
今天搭建一个SpringBoot 环境出现 "The server time zone value ‘�й���ʱ��’ "错误在JDBC驱动包6版本(包括6)以上将jdbc连接的URL后面加上serverTimezone参数,如:jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC...原创 2020-01-07 11:19:03 · 11763 阅读 · 6 评论 -
count条件统计中为什么要加or null
count() 条件统计中为什么要加or null案例:统计在今天注册的用户写法一:直接在where后面跟上条件select count(1) from user where DATE_FORMAT(register_time,'%Y-%m-%d')=CURDATE() 还有另一种写法:在count函数中添加条件(需要加上or null),大家可以自行测试,如果不加or null的效...原创 2019-12-03 15:02:12 · 3499 阅读 · 4 评论 -
三大范式
数据库的三大范式第一范式概念:每列的数据必须保证其原子性,即每列的数据必须细化到不可再拆分案例:学号姓名班级001张三Java01班002李四Java02班003王五UI01班004赵六产品02班在上述表中,班级字段存在数据冗余,如果我们想统计Java学科的人数或者01班级的人数岂不是很尴尬?根据第一大范式条件必须保证每一列数据...原创 2019-10-31 17:18:31 · 372 阅读 · 0 评论 -
MySQL中幻读现象
幻读:即由"可重复读"隔离级别引发的事务问题,有些人说幻读就是一次事务中读取到的数据条数不一样,我不太认可这句话,当然这句话并没有什么问题,但是由初学者来理解的话很容易进误区!幻读场景:银行A开启了一个事务窗口,查询当前系统中有没有"wangwu"用户,发现没有,银行B也开启了一个事务窗口,查询当前系统中也没有"wangwu"用户,银行A先创建"wangwu"用户并且提交,由于可重复读取,银行...原创 2019-07-07 19:22:59 · 5140 阅读 · 4 评论