![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
cafe-BABE
嵌入式
展开
-
【MySQL】binlog日志简介
binlog日志,也叫做二进制日志。二进制日志记录了对mysql 数据库的执行更改的所有操作,他是一种“逻辑日志”(也就是说,他会记录用于记录用户对数据库操作的SQL语句((除了数据查询语句)信息)。但是不包括select和show这类操作(因为他们没有对数据进行修改)。但是,即使操作本身没有导致数据库变化,该操作也可能会写入二进制文件。面试题1、这个日志的作用是什么?1、恢复:比如一个数据库全备文件恢复之后,用户可以通过二进制日志进行point in time (PIT)的恢复2、主从复制原创 2020-09-29 15:38:16 · 950 阅读 · 0 评论 -
【MySQL】各种连接(左连接,右连接,内连接,全连接等等)
title: 【MySQL】各种“连接”(内连接,左连接,右连接等等)tags:数据库MySQLcategories:数据库后端abbrlink: 44933date: 2020-08-19 21:50:58示意图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KA8yVANz-1597847600393)(https://raw.githubusercontent.com/1171257311/picgo/master/images/%E6%8D%.转载 2020-08-19 22:33:55 · 518 阅读 · 0 评论 -
【MySQL】having和where的区别
讲到having,首先要提一下group by。group by的作用是什么?其实就是把数据分为多个逻辑组,以便对每个组都能进行上面的“聚集计算”,得到汇总的信息。也就是说group by指示了数据库对每个组而不是整个结果集进行聚集。什么是“汇总的的信息”?就是利用各种聚集函数,比如count,avg,sum,max,min之类的,目标是得到总体的信息,而不是某些行的具体数据。注意:group by使用在where之后,order by 之前。那么having的作用是什么?当我们进行原创 2020-08-19 09:12:22 · 190 阅读 · 0 评论 -
【MySQL】面试题之:MVCC能否解决幻读?
“幻读”指,同一个事务里面连续执行两次同样的sql语句,可能导致不同结果的问题,第二次sql语句可能会返回之前不存在的行。先给出结论:不能笼统的说能不能解决,因为有的情况下可以解决,但是有的情况下解决不了。情况1mysql里面实际上有两种读,一种是“快照读”,比如我们使用select进行查询,就是快照读,在“快照读"的情况下是可以解决“幻读”的问题的。使用的就是MVCC,具体来说如下图,几个事务并发执行:可以看到,尽管别的事务已经提交插入和更新,但是事务A的select读取...原创 2020-08-01 17:39:21 · 15796 阅读 · 22 评论 -
【MySQL】全文索引浅析
全文索引指的是:”将存储在数据库里面的整本书或者整篇文章里面的任意内容查找出来的技术“。1、MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引;2、MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引;3、只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。为什么使用全文索引?首先对于使用字段前缀进行查找,B+树索引是支持的。比如:SELECT * FROM table_name where原创 2020-07-24 15:18:45 · 443 阅读 · 0 评论 -
【MySQL】数据库的基本结构
参考:https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453141466&idx=1&sn=c89ecc9aa3fb62dd119ad17b4a9cada5&scene=21#wechat_redirect首先看一张图根据这张图简单说一下数据库的运行流程和基本架构。1、连接器 我们要进行查询,第一步就是先去链接数据库,那这个时候就使用连接器把客户端和数据库连接起来,他负责跟客户...转载 2020-07-24 09:34:52 · 873 阅读 · 0 评论 -
【MySQL】联合索引的使用
什么是联合索引?MySQL可以使用多个字段同时建立一个索引,叫做联合索引:如下:CREATE INDEX INDEX_NAME ON TABLE_NAME(a,b,c)这个联合索引实际上效果等同于创建了索引a,索引(a,b),索引(a,b,c)这三个索引。因此联合索引更节约空间。如果是创建完表之后添加索引,那么可以:ALTER TABLE `table_name` ADD INDEX index_name ( `a`, `b`, `c` )也可以在创建表的时候这样:CREA原创 2020-07-23 14:41:09 · 4764 阅读 · 1 评论 -
【MySQL】CheckPoint机制
之前讲到,缓冲池设计的目的就是协调CPU和磁盘之间速度的鸿沟,因此对页的操作首先是在缓冲池里面完成的,也就是如果修改了一个页里面的记录,那么这个页就是脏的,也就是缓冲池里面的页要比磁盘里面的新。因此需要将缓冲池里面的页刷新到磁盘。但是如果每当一个页发生变化就刷新的话,效率也很低。同时,如果将缓冲池的页刷新到磁盘的过程中宕机了,那么数据就不能恢复了。因此事务数据库普遍采用write ahead log,即当事务提交时,先写重做日志(redo log),再修改页。这样即使宕机了,也可以通过redo log来恢复原创 2020-07-22 15:16:48 · 890 阅读 · 0 评论 -
【MySQL】面试题之:在InnoDB中一个3层B+树最多大概可以存放多少行数数据??
首先,在innodb存储引擎里面,最小的存储单元是页(page),一个页的大小是16KB。如果我们在数据库的命令行输入如下命令,那么可以返回:这就说明了一个页的大小为16384B,也就是16kb。数据表中的数据都是存储在页中的,所以一个页中能存储多少行数据呢?假设一行数据的大小是1k,那么一个页可以存放16行这样的数据。那如果想查找某个页里面的一个数据的话,得首先找到他所在的页,但是如果按照普通方法,也就是遍历的话,就得一个页一个页的查找,显然太慢了。innodb存储引擎我们都知道使用B+树原创 2020-07-15 15:16:46 · 12288 阅读 · 2 评论 -
【MySQL】面试题之:如果一个表a字段是从1~100,b字段是从1~1000,c是从1~10000,选取哪个列作为索引?
具体问题:58、如果一个表a字段是从1~100,b字段是从1~1000,c是从1~10000,选取哪个列作为索引,为什么?如果需要查找a>一个数,b=一个数,c小于一个数,如何创建联合索引?以下是我个人的思考,这个问题是在字节面试的时候问的,当时答得不好,现在回过头来再思考一下,当然还是比较浅显,也不一定对,希望了解的人可以在回复里面补充一下。前面一个问题,首先重复率高的字段不适合用于作为索引,因此应该选c字段作为索引,因为c字段的重复率最低。那为什么选择重复率低的字段呢,主要两个理由:1原创 2020-07-13 11:42:22 · 559 阅读 · 0 评论 -
【MySQL】正则表达式的使用
作用是用来进行文本搜索匹配的特殊的字符集合。注意mysql里面的正则表达式的匹配是不区分大小写的,也就是说大写小写都匹配。记住,如果不指定位置的话,我们搜索的是包含正则表达式的,而不是完全匹配的。使用1、REGEXP和like的使用方法类似,当写了一个REGEXP之后,就表明后面跟的是一个正则表达式。select name from peoducts where name REGEXP '1000' ;这样只要是字符串里面出现了1000的都可以匹配。比如:Jet 1000原创 2020-06-22 15:36:00 · 452 阅读 · 0 评论 -
【MySQL】MVCC浅析
作用和适用范围MVCC只在可重复读和提交读两种隔离级别下工作。因为在未提交读的隔离级别下,总数读取最新的数据行,而不是符合当前事务版本的数据行,而可串行化则是通过加锁互斥来访问数据,因此不需要 MVCC 的帮助。MVCC是一种用来解决读-写冲突的无锁并发控制。用人话来说,就是MVCC实现了读操作不用阻塞写操作,写操作不用阻塞读操作的同时,避免了脏读和不可重复读。什么是可重复读和提交读?提交读(也叫不可重复读):在这种隔离级别下,所有事务只能读取其他事务已经提交的内容。能够彻底解决脏读的现..原创 2020-06-17 15:11:41 · 823 阅读 · 3 评论 -
【MySQL】如何使用“子查询”
什么是子查询?子查询简单来说就是嵌套在其他查询里面的查询。使用场景11、比如现在有一堆订单数据,其中订单号和对应的买家id,订单日期等放在orders表里面:但是具体的订单项包括买了什么物品,每个物品的数量放在oederitems表里面 :而关于客户id,客户姓名,客户地址等具体信息又在cuntomers表里面:现在要统计购买物品为:“内裤”的所有用户,此时就可以使用子查询。首先如果不使用子查询,那么需要按照下面这样一步一步来执行:1、查询orderirems里面包含“内裤.原创 2020-06-15 15:00:31 · 1094 阅读 · 0 评论 -
【MySQL】什么是联结join?
目录什么是联结?内部联结?表的别名自联结外部联结1、内部联结2、外部联结(left join)3、 外部联结(right join)什么是联结?内部联结?联结或者说关联,指的就是在数据检索查询时,将多个表的数据联系起来,完成共同的查询。比如这样进行搜索:select vend_name,prod_name,prod_price from vendors,products where vendors.id=products.id order by vend_na原创 2020-06-14 13:57:09 · 439 阅读 · 0 评论