![](https://img-blog.csdnimg.cn/20191205103024605.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL
文章平均质量分 94
总结MySQL知识点
SunAlwaysOnline
开始工作的第3年!
展开
-
简单谈谈MySQL的两阶段提交
一、简单回顾三种日志在讲解两阶段提交之前,需要对MySQL中的三种日志即binlog、redo log与undo log有一定的了解。在这三种日志中,很多同学会把binlog与redo log混淆,下面使用一张表格来简单对比下两者的区别。...原创 2021-12-21 22:36:11 · 14308 阅读 · 17 评论 -
8种方案,保证缓存和数据库的最终一致性
我们通常使用缓存机制来提升系统的性能,缓存系统下的读写操作,一般都需要操作数据库与缓存。对于读操作,一般是先查询缓存,查询不到再查询数据库,最后回写进缓存。而对于写操作,究竟是先删除(更新)缓存,再更新数据库,还是先更新数据库,再删除(更新)缓存呢?由于对数据库以及缓存的整体操作,并不是原子性的,再加上读写并发,究竟什么样的方案可以保证数据库与缓存的一致性呢?下面介绍8种方案,配合读写时序图,希望你能从其中了解到保证一致性的设计要点。原创 2021-11-25 23:42:24 · 11420 阅读 · 6 评论 -
探究MySQL的索引结构选型
本文将探究MySQL索引结构的技术选型,分析哈希表、二叉搜索树、AVL树、红黑树、B树与B+树各自的优缺点。解释了MySQL最终选择B+树作为其索引的组织方式的原因,并在最后增加了3道常问的面试题。原创 2021-11-20 14:15:15 · 5251 阅读 · 3 评论 -
通俗易懂的MySQL事务及MVCC原理,我先收藏了!
一、事务简介与四大特性事务指的是一组命令操作,在执行的过程中,要么全部成功,要么全部失败。由引擎层支持事务,MyISAM就不支持事务,而InnoDB是支持事务的。事务具有以下四大特性(ACID):原子性(Atomicity):指事务不可分割,要么全部成功,要么全部失败,不可能存在部分成功或部分失败的情况。如果执行某一条语句失败后,将会触发之前所有执行过的语句的回滚,因此靠的是undo log。 一致性(Consistency):在事务执行前后,数据的完整性没有遭到破坏。一致性是mysql追原创 2021-10-25 23:30:00 · 14531 阅读 · 13 评论 -
数据库日志——binlog、redo log、undo log扫盲
binlog又称归档日志,由Server层实现与记录,因此对任何引擎都有效。binlog是一种只记录对表中数据以及对表结构产生更改操作的二进制文件,比如有insert、update、delete、create table、alter table等操作,不记录select、show,因为这些操作不会产生任何更改。不过就算一个update未产生数据变化,也是会被记录进去的。binlog是追加写入的,一个文件写满,会重新创建一个文件继续写,文件名称是mysql-bin.xxxxxx,例如myql-bi原创 2021-09-29 22:27:22 · 6420 阅读 · 6 评论 -
面试常问集锦——线上排查部分
实操线上故障如何快速排查?来看这套技巧大全https://mp.weixin.qq.com/s/PWNnq07cPYB4o421VFEFHwJAVA线上故障排查全家桶https://mp.weixin.qq.com/s/UTGtusIyScJGOjdZPdU4Ugcpu飚高怎么处理CPU占用100%排查过程 - 云+社区 - 腾讯云(1)top 通过top命令找到,找到最耗CPU的进行PID,从下图种可以发现PID为 15913不断按P可以按照CPU使用率进行排序(2原创 2021-04-01 22:40:52 · 2560 阅读 · 0 评论 -
面试常问集锦——MySQL部分
Mysql速成大法请签收MySQL灵魂十连https://mp.weixin.qq.com/s?__biz=MzI4NjI1OTI4Nw==&mid=2247488721&idx=1&sn=eead82d2b7a0fdf993beacc4dfd60313&chksm=ebdef5e9dca97cff9d638877e5855850727ae26ebcfd60c7700ae53e311fa6ddb64b63bb9552&scene=178&cur_alb原创 2021-03-22 11:11:33 · 4748 阅读 · 1 评论 -
【Mysql】图解左、右、内与全连接
一、左连接二、右连接三、内连接四、外连接原创 2020-10-10 11:27:35 · 7343 阅读 · 5 评论 -
基于SpringBoot与数据库表记录的方式实现简单的分布式锁
同一进程内的不同线程操作共享资源时,我们只需要对资源加锁,比如利用JUC下的工具,就可以保证操作的正确性。对JUC不熟悉的同学,可以看看以下的几篇文章:浅说Synchronized Synchronized的优化 Unsafe类 浅探CAS实现原理 CountDownLatch实现原理 ThreadLocal使用不好,小心造成内存泄露! 更多文章,在我的多线程专栏中但是,为了高可用,我们的系统总是多副本的,分布在不同的机器上,以上同进程内的锁机制就不再起作用。为了保证多副本系统对共享资源的原创 2020-08-25 22:58:40 · 699 阅读 · 0 评论 -
线上遇到的慢查询的案例,MySQL慢查询到底该如何“优化”?
一.复杂的深分页问题优化背景有一个article表,用于存储文章的基本信息的,有文章id,作者id等一些属性,有一个content表,主要用于存储文章的内容,主键是article_id,需求需要将一些满足条件的作者发布的文章导入到另外一个库,所以我同事就在项目中先查询出了符合条件的作者id,然后开启了多个线程,每个线程每次取一个作者id,执行查询和导入工作。查询出作者id是1111,名下的所有文章信息,文章内容相关的信息的SQL如下:SELECT a.*, c.*FROM .转载 2020-08-07 09:16:46 · 1177 阅读 · 0 评论 -
SQL中有关DQL、DML、DDL、DCL的概念与区别
SQL(Structure Query Language)结构化查询语言是数据库的核心语言,是高级的非过程化编程语言。它功能强大,效率高,简单易学易维护。SQL语言基本上独立于数据库本身、使用的机器、网络、操作系统,基于SQL的DBMS产品可以运行在从个人机、工作站到基于局域网、小型机和大型机的各种计算机系统上,具有良好的可移植性。SQL结构化查询语言包含6个部分1.数据查询语言(DQL: Data Query Language)数据检索语句,用于从表中获取数据。通常最常用的为保留字SELECT转载 2020-06-21 20:55:47 · 1580 阅读 · 0 评论 -
【MySQL】谈谈锁的类型
MySQL中的锁分为表锁以及行锁,从字面意思就可以得知,表锁是对一整张表进行加锁,而行锁是针对于特定的行。在Server层面,提供了表锁的实现,而行锁则由存储引擎实现。Innodb引擎支持行锁,Myisam则不支持行锁。原创 2020-06-16 23:14:25 · 1367 阅读 · 2 评论 -
【数据库】binlog、redo log、undo log扫盲
一、什么是binlogbinlog其实在日常的开发中是听得很多的,因为很多时候数据的更新就依赖着binlog。举个很简单的例子:我们的数据是保存在数据库里边的嘛,现在我们对某个商品的某个字段的内容改了(数据库变更),而用户检索的出来数据是走搜索引擎的。为了让用户能搜到最新的数据,我们需要把引擎的数据也改掉。一句话:数据库的变更,搜索引擎的数据也需要变更。于是,我们就会监听binlog的变更,如果binlog有变更了,那我们就需要将变更写到对应的数据源。什么是binlog?binl转载 2020-06-09 11:02:29 · 3062 阅读 · 0 评论 -
一步一步推导出 Mysql 索引的底层数据结构
Mysql 作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是 Mysql 数据的存储形式以及索引的设计,决定了 Mysql 整体的数据检索性能。我们知道,索引的作用是做数据的快速检索,而快速检索的实现的本质是数据结构。通过不同数据结构的选择,实现各种数据快速检索。在数据库中,高效的查找算法是非常重要的,因为数据库中存储了大量数据,一个高效的索引能节省巨大的时间。比如下面这个数据表,如果 Mysql 没有实现索引算法,那么查找 id=7 这个数据,那么只能采取暴力顺序遍历转载 2020-05-18 09:48:33 · 345 阅读 · 0 评论 -
【Mysql】回表与覆盖索引是神魔鬼?
select id,name where name='shenjian'select id,name,sex* where name='shenjian'*多查询了一个属性,为何检索过程完全不同?什么是回表查询?什么是索引覆盖?如何实现索引覆盖?哪些场景,可以利用索引覆盖来优化SQL?这些,这是今天要分享的内容。注:本文试验基于MySQL5.6-InnoDB。一...转载 2020-04-30 11:19:20 · 646 阅读 · 0 评论 -
【数据库】浅析Innodb的聚集索引与非聚集索引
Mysql存储引擎之一的Innodb的索引,可以分为聚集索引与非聚集索引,这两种索引都是使用B+树组织的。本文不讲解什么是索引,对索引不了解的同学可以先移步到我的另外一篇文章【数据库】mysql索引简谈在分析这两种索引之前,我们先建立一个Person表:CREATE TABLE person ( `id` int(11) NOT NULL AUTO_INCREMENT COMM...原创 2020-04-08 17:14:33 · 1583 阅读 · 1 评论 -
【数据库】MySQL 加锁处理分析
一、背景MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的...转载 2020-04-07 15:28:30 · 5331 阅读 · 12 评论 -
【数据库】mysql死锁问题分析
线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”。 Oh, My God! 是死锁问题。尽管报错不多,对性能目前看来也无太大影响,但还是需要解决,保不齐哪天成为性能瓶颈。 为了更系统的分析问题,本文将从死锁检测、索引隔离级别与锁的关系、死锁成因、问题定位这五个方面来展开讨论。 ...转载 2020-04-07 15:09:53 · 1844 阅读 · 1 评论 -
【MySql】Specified key was too long; max key length is 767 bytes的解决方案
问题背景今天由于业务需要,在mysql5.6的数据库上,创建了一个主键是varchar(500)的字段,然后就提示这样的错Specified key was too long; max key length is 767 bytes原来是主键的长度太长,最大长度仅支持767字节,注意,这里的是字节。那么,我定义一个主键是varchar(500)的字段,不管我使用utf8编码,那...原创 2020-01-10 17:08:32 · 17154 阅读 · 3 评论 -
【数据库】索引优化策略
索引优化策略关于什么是索引,如何建立索引,索引的优缺点等,请移步我的另外一篇文章mysql索引简谈一、为什么要建立索引?一句话,为了加快查询效率。注意这里的“查询”,而不是增删改。建立索引的列,一旦发生了增加、更新或删除操作,索引是需要维护的,此外不宜建立大量的索引,索引也占用磁盘空间。建立索引,...原创 2018-10-31 20:53:01 · 9332 阅读 · 0 评论 -
【数据库】mysql索引简谈
mysql索引简谈一、什么是索引就好比我们在看一本书的时候,有目录的话,我们可以快速定位到想看的地方,而没有目录的话,我们只能一页一页地翻。索引就像目录,有了索引,数据库可以快速查询到目标内容,而不必查找整个数据库表,但是如果没有的话,数据库只能一行一行地遍历数据。本文使用的案例表:学生表(...原创 2018-08-28 17:01:11 · 11395 阅读 · 2 评论 -
【数据库】事务隔离级别
mysql事务隔离级别为了更好地说明事务隔离级别,请先移步快速理解脏读、不可重复读、幻读mysql中有四种隔离级别,分别是读未提交(Read uncommitted),读已提交(Read committed),可重复读(Repeatable read),可串行化(Serializable),用来解决数据库操作中产...原创 2018-08-26 12:44:45 · 21209 阅读 · 13 评论 -
【数据库】快速理解脏读、不可重复读、幻读
快速理解脏读、不可重复读、幻读?理解这三种由于并发访问导致的数据读取问题,再理解事务隔离级别就简单多了。【1】脏读(读取未提交数据)A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。就好像原本的数据比较干净、纯粹,此时由于B事务更改了它,这个数据变得不再纯粹。这个...原创 2018-08-14 19:24:29 · 109990 阅读 · 49 评论 -
【数据库】select、from、where、group by、having、order by、limit的组合用法
select、from、where、group by、having、order by、limit组合用法一、关键词意义【1】select用来指定查询哪些列,可以使用聚合函数。【2】from用来指定查询哪张表。【3】where用来指定过滤条件,针对原表,那么条件中的列名只能是是原表的列名,不可以是别名或者使用聚合函数。【4】group by用来对结果集进行...原创 2018-11-03 15:30:45 · 15124 阅读 · 1 评论 -
【JAVA】如何解决SQL注入?
如何解决SQL注入?面试中经常问到,SQL注入是什么?又怎么防止SQL注入?为了不再尴尬得只回答出使用PreparedStatement,我们还是有必要了解一下其他的方式。一、什么是SQL注入?说简单点,就是部分用户在表单中输入sql语句的片段,对没有输入检验的网站可能带来毁灭性的打击,轻则绕过登录,重则...原创 2018-11-02 22:40:07 · 15049 阅读 · 2 评论 -
【日常学习笔记】2019/1/10(Oracle语句学习)
Oracle语句学习(1)select * from dual中的dual到底是什么? 在sql-developer中测试发现,dual只是一个包含一列,永远只返回一条数据记录的虚拟表。使用dual,是为了构成select的语法规则。当我们需要查询一些不需要表名的数据时,但为了保证sql语法正确性,我们需要添加dual。比如:【1】查询当前用户select us...原创 2019-01-10 11:30:39 · 2614 阅读 · 0 评论 -
【数据库】快速导出表结构到excel中
【数据库】快速导出表结构到excel中 这几天刚来实习,项目主管给我布置了个写文档的任务,要求把数据库中所有的表全部填在以下格式的文档中一开始慢悠悠的从navicat中一个一个查看表的结构,不停的复制粘贴-复制粘贴,头都大了,几十张表,几千个字段,我啥时候能下班啊。于是,我想起可以直接利用sql语句,生成上表的样式,然后直接复制...原创 2019-05-27 17:27:58 · 14237 阅读 · 4 评论 -
【数据库】记住:永远不要在MySQL中使用UTF-8
记住:永远不要在MySQL中使用UTF-8最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误:Incorrect string value:‘\xF0\x9F\x98\x83 <…’ for column ‘summar...转载 2019-09-24 16:20:41 · 1248 阅读 · 2 评论 -
【Oracle数据库】Oracle SQL*Plus环境下的简单操作
Oracle SQL*Plus环境与查询(1)登录到Oracle(2)help index查看Oracle有关命令(3)创建登录表(4)插入数据(5)查询所有数据(6)设置列的显示格式(7)重新查询(8)修改第一条数据...原创 2018-07-15 16:03:46 · 8959 阅读 · 0 评论