
MySQL
文章平均质量分 71
CaptainCats
悟已往之不谏、知来者之可追。
展开
-
mysql left join关联字段的类型不一致导致索引失效
t1和t2通过order_id关联,order_id在t2建有索引order_detail_index_order_id,原因是order_id字段在t1中是int类型,在t2中是varchar类型,导致用不到索引。我们用另外一种办法,在查询中通过函数将它们转换为一样的类型和字符集。不过修改字段类型有时候会可能遇到一些阻碍。一种办法是修改字段类型让它们保持一致,看下这条sql的explain。但是这里却没有用到。原创 2022-09-29 23:58:20 · 2180 阅读 · 0 评论 -
mysql explain 12列信息解释
分别是id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra。常见的类型有system、const、eq_ref、ref、range、index、all等,explain能解释mysql如何处理查询sql,表加载顺序、表如何连接、索引的使用情况等。如果是多列索引,可能用到的只是一部分,留意这个key_len可以知道用到了多少列。id如果相同,可认为是同一组,同组的从上往下执行,原创 2022-09-27 20:56:32 · 668 阅读 · 0 评论 -
mysql多列索引(组合索引)特点和使用场景
mysql多列索引的特点原创 2022-07-04 20:48:49 · 1892 阅读 · 0 评论 -
MySQL insert into where 去重复
这儿有一个order表,脚本我放在最后,我想在insert之前判断order_name是否存在,不存在则保存,存在则不保存。但是MySQL insert语句是不能跟where子句的,像这样:INSERT INTO `order` (order_name) VALUES ('订单3') WHERE NOT EXISTS (SELECT order_id FROM `order` WHERE order_name = '订单3');会报错,INSERT INTO `order` (order_nam原创 2022-03-01 16:27:36 · 4340 阅读 · 0 评论 -
MySQL join查询的原理
MySQL join查询的原理MySQL用Nested-Loop Join算法实现join查询Nested-Loop Join有三种实现SNLJBNLJINLJ聚集索引非聚集索引NLJ优先级如何优化join查询效率MySQL用Nested-Loop Join算法实现join查询区分驱动表和被驱动表,以驱动表的结果集为循环的基础,访问被驱动表过滤数据,然后合并结果,驱动表在外循环、被驱动表在内循环。如果还有第三张参与join查询的表,则以合并的结果为驱动表,第三张表作为被驱动表,以此类推。left原创 2022-01-25 19:12:22 · 2126 阅读 · 1 评论 -
MySQL join查询的区别
MySQL join查询的区别MySQL支持三种类型的join实例测试数据inner joinleft joinright join基于这三种join,还可以查询其它集合的结果。SQL脚本MySQL版本:8.0.27。MySQL支持三种类型的joinjoin/inner join(内连接):只获取匹配的记录;left join/left outer join(左连接或左外连接):获取左表所有记录、右表匹配记录,右表没有匹配记录显示null;right join/right outer join原创 2022-01-17 16:55:31 · 1032 阅读 · 1 评论 -
通过B+Tree平衡多叉树理解InnoDB引擎的聚集和非聚集索引
B+Tree平衡多叉树与InnoDB引擎的聚集和非聚集索引InnoDB引擎是通过B+Tree实现索引结构。二叉树(Binary Tree)平衡二叉树(AVL Tree)平衡多叉树(B-Tree)B+Tree聚集和非聚集索引聚集索引(clustered index)非聚集索引(secondary index)这里文章的原创标签其实应该写成"转载"的,但是由于其中引用和参考了多篇文章,所以不知道到底该标记哪一篇是原文,索性就写成原创了。对于上述文章中不准确的地方略有修改,也稍微加上了自己的理解,整理出来以供原创 2020-07-25 00:36:00 · 702 阅读 · 0 评论 -
MySQL left join查询on和where的表达式有什么区别
MySQL left join查询on和where的表达式有什么区别数据goods = '苹果'sql1sql2数据order订单order_detail订单明细两个表通过order_id关联goods = ‘苹果’sql1条件在on后面SELECT * FROM `order` t1 LEFT JOIN order_detail t2 ON t2.order_id = t1.order_id AND t2.goods = '苹果'; 查询订单中的苹果。sql2条原创 2021-12-30 15:06:48 · 588 阅读 · 0 评论 -
MySQL查询列必须和group by字段一致吗?
MySQL查询列必须和group by字段一致吗?场景:查询各部门薪水最高的员工。方法一:方法二MySQL group by是如何决定哪一条数据留下的?那么target list和group by column不匹配就一定不能执行吗?MySQL版本:8.0.27场景:查询各部门薪水最高的员工。CREATE TABLE `employee` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID', `dept` int NOT NULL COMMEN原创 2021-12-23 14:13:56 · 2220 阅读 · 4 评论 -
Windows部署MySQL服务
Windows10部署MySQL8.0.27服务下载https://dev.mysql.com/downloads/windows/installer/8.0.html安装1、双击mysql-installer-community-8.0.27.1.msi2、中间可能会提示安装c++环境,同意即可,过程很短。3、next这个警告看不懂,直接next4、username&password默认用户:root设置密码:root123设置为Windows服务但不随系统启动原创 2021-12-22 15:36:49 · 1684 阅读 · 0 评论 -
docker部署的mysql服务报错“Expression #1 of ORDER BY clause is not in GROUP BY clause and contains ... “
问题通过navicat访问基于docker部署的mysql服务,使用sql语句创建数据库发生异常:mysql版本为:5.7.31sql:CREATE DATABASE superv_xxx;报错:Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functiona原创 2021-01-06 19:01:44 · 277 阅读 · 0 评论 -
mysql在什么情况下会发生死锁
mysql InnoDB在什么情况下会发生死锁的现象什么是死锁会出现死锁的几种情况1、一张表两行记录交叉申请互斥锁2、两张表两行记录交叉申请互斥锁3、聚集索引与非聚集索引冲突4、聚集索引冲突5、间隙锁冲突这片文章,可能会需要大家对InnoDB的数据结构和隔离级别有一定的了解。我之前整理的有这部分的文章:通过B+Tree平衡多叉树理解InnoDB引擎的聚集和非聚集索引InnoDB的隔离级别是如何实现的文章前提:InnoDB RR隔离级别。什么是死锁mysql死锁是多个事务因竞争锁而造成的一种相互原创 2020-09-27 20:46:01 · 3510 阅读 · 0 评论 -
MySQL InnoDB的Repeatable Read隔离级别就一定能避免不可重复读吗
在上一篇InnoDB可重复读隔离级别是如何实现的文章中,提到了快照读,MySQL通过MVCC中快照读的方式解决不可重复读问题,那么在RR级别下就一定能避免不可重复读吗,我们来一起看下。快照读:在RR隔离级别下,同一事务中后边所有这样的读读到的都是第一个这样读的快照,或是被当前事务刷新过的快照,这样做到了可重复读。需要注意这个被当前事务刷新过的快照,当事务中发生了当前读(在默认隔离级别下,普通的select就是快照读,而insert、update、delete、select … lock In sh原创 2020-09-11 21:03:29 · 495 阅读 · 0 评论 -
InnoDB的隔离级别是如何实现的
innerDB默认隔离级别-可重复读是如何实现的mysql多事务并发的场景下会出现的问题:1、脏读2、不可重复读3、幻读隔离级别1、读未提交(Read Uncommitted)2、读已提交(Read Committed)3、可重复读(Repeatable Read)4、可串行化(Serializable)常见锁乐观锁和悲观锁不是真实存在的锁共享锁(Shared Lock)也叫读锁或S锁排它锁(Exclusive Lock)也叫写锁或X锁行锁(Record Lock)间隙锁(Gap Lock)Next-Key原创 2020-09-10 20:20:54 · 1963 阅读 · 1 评论