
数据库
程序员故里
公众号:程序员故里
展开
-
一条查询SQL语句是如何执行的
平时我们使用的数据库,看到的通常是一个整体,比如我们执行一条查询SQL,返回一个结果集,却不知道这条语句在MySQL内部是如何执行的,接下来我们就来简单的拆解一下MySQL,看看MySQL是由哪些“零件”组成的,在这个过程中逐步的揭开MySQL的面纱,对MySQL有个深入的理解。这样在我们以后遇到MySQL的一些异常或者问题的时候,就可以快速定位问题并解决问题。下边通过一张图来看一下SQL的执行流程,从中可以清楚的看到SQL语句在MySQL的各个功能模块中执行的过程。从上图来看,MySQL大体上可以分原创 2020-10-30 21:08:17 · 368 阅读 · 0 评论 -
一条更新SQL在MySQL数据库中是如何执行的
前边的在《一条SQL查询在MySQL中是怎么执行的》中我们已经介绍了执行过程中涉及的处理模块,包括连接器、分析器、优化器、执行器、存储引擎等。今天我们来一起看看一条更新语句又是怎么一个执行流程。查询语句的一套执行流程,更新语句也会同样的走一步,下边我们在对照上次文章中的图来简单的看一下:首先,在执行语句前要先连接数据库,这是第一步中连接器的工作,前面我们也说过,当一个表有更新的时候,跟这个表有关的查询缓存都会失效,所以我们一般不建议十月查询缓存。接下来,分析器会经过语法分析和词法分析,知道了这是一条原创 2020-11-09 00:38:09 · 382 阅读 · 1 评论 -
高并发场景下的数据库事务调优
数据库事务是访问可能操作各种数据项的一个数据库操作序列,这些操作要么全部成功,要么全部失败。提起事务,大家都知道ACID属性,这些特性在前边的文章里都有详细的讲解,感兴趣的可以通过历史文章查看。在Java中有并发编程,可以多线程并发执行,并发可以提高程序执行的效率,也会带来线程安全的。数据库事务和多线程一样,为了提高数据库处理事务的吞吐量,数据库也支持并发事务,在并发处理数据的过程中,也存在着安全问题。我们本文将从并发事务可能引发的问题、解决并发问题、MySQL的锁机制、锁的实现等方面逐渐深入,探讨高并原创 2020-11-06 02:27:03 · 555 阅读 · 1 评论 -
你需要知道的redo log和binlog
MySQL中有两个重要的日志模块,分别是redo log(重做日志)和binlog(归档日志)。当我们学习MySQL的时候,这两部分内容是绕不开的,本文我将来详细的介绍一下这两个日志模块,它们在设计上有很多好玩的地方,一些思想也可以在我们工作中使用。redo log这里我们举个例子,比如饭店掌柜有个小黑板,专门用来记录客人的赊账记录,如果赊账的人不多,那么他就可以把顾客名字和账目写在小黑板上,如果赊账的人很多,小黑板总会记不下的时候,这个时候掌柜的就需要一个专门记录赊账的账本。如果有人又要赊账的时候,原创 2020-10-30 21:41:05 · 411 阅读 · 0 评论 -
MySQL索引失效问题
索引在我们使用MySQL数据库时可以极大的提高查询效率,然而,有时候因为使用上的一些瑕疵就会导致索引的失效,无法达到我们使用索引的预期效果,今天介绍几种MySQL中几种常见的索引失效的原因,可以在以后的工作中尽可能避免因索引失效带来的坑。一、 被索引字段,发生了隐式类型转换MySQL在sql执行过程中,会将sql语句中与字段原类型不匹配的值,进行一个类型转换看个例子说明,我们创建一个user表,并且添加一个主键id索引,两个二级索引age和phoneCREATE TABLE `t_user`(原创 2020-10-30 21:30:37 · 351 阅读 · 0 评论 -
MySQL数据库利用binlog数据恢复
年初的微盟删库事件人尽皆知,造成的影响也是很深远的,短时间内公司市值蒸发30港元,赔偿商家1.5亿,造成的其他影响也是很深远的。最终,再腾讯云团队的协助下,经过7*24小时的努力,找回全部数据,此次事件的数据量规模也是非常大的,具体怎么找回被删数据,我们可以来聊聊数据恢复的几种方法以mysql为例。binlog是二进制日志文件,用户记录用户对数据库的操作,各个从库的同步也是通过binlog,是非常重要的数据库日志文件,其他的关系型数据库的数据恢复也是大同小异的,例如Oracle数据库可以通过它的归档日志原创 2020-10-30 21:15:43 · 518 阅读 · 0 评论 -
MySQL的事务隔离级别和长事务,看这一篇就够了
提到事务,大家都不陌生,在使用数据库的时候,我们总会提到事务,最经典的例子就是转帐,比如小王的银行卡上有一百块,要把这一百块转账,转账过程中的一系列操作,比如查询余额、扣减资金、增加资金、更新余额等,这些操作必须保证是一体的,不然等查询余额之后,在扣除资金之前,完全可以借着这个时间再查一次,然后将这个钱转给另外一个人,这样不就乱套了。事务的概念各位都不陌生,简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。MySQL数据库的事务支持是在引擎层实现的。MySQL是一个支持多引擎的系统,但是原创 2020-11-02 00:01:19 · 1128 阅读 · 0 评论