
MySql
文章平均质量分 66
我是坑货
这个作者很懒,什么都没留下…
展开
-
UNION ALL和LEFT JOIN的区别和使用场景
left join 应该是最常用的一个连接,但是有时候left join也不能包打天下。因为left join是一个获取笛卡尔积的临时表,如果这些的表都是一对一的关系,怎么join都没事。但是实际上我们会遇到很多一对多的对应情况,就需要按照实际情况来判断。举个例子,表A和表B的关联的关系是一对多的,表A和表C也是一对多的情况,这里A和B,C的关系是关联起来一对多,也有A和B,C关联不上得情况。我们这边通过统计数量,b_staus为1取关联B的b_count,c_staus为2时取关联C的c_count。原创 2023-01-04 22:21:16 · 3574 阅读 · 0 评论 -
MySQL的一些指令,函数以及关键字
因为对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。如果不是索引字段的话其实还好,毕竟MySQL里面会有不少buffer,比如sort buffer这些,实际上是在内存上操作(当然太多了也会走磁盘),其实也挺快的。这里要注意的是id指的是pid,我们发现阻塞的进程直接kill pid就可以。这个里面我准备记录一些比较有意思的MySQL的指令和函数,当然使用函数的时候我们要注意,会不会因为函数导致不走索引,走全表扫描的情况。可以通过show processlist来查看。原创 2023-01-03 14:41:06 · 731 阅读 · 0 评论 -
联表更新数据以及You can‘t specify target table ‘xxx‘ for update in FROM clause
最近遇到一个表的的问题,就是由于批量处理错误,把一个表的某个字段的删除掉了,现在解决方案是通过另一个表对应的一个字段进行补充。就是A 表的 b字段现在为空,但是可以通过 A表的的c字段关联C表c字段,通过C表中的b字段来回填A表中的b字段。我把aas.id in (1001) 给他一个确定的值,发现错就不保了,说明问题可能是IN里面的查找语句的问题。类似你更新A, 但是你是通过一个select语句来把你要修改A表的对应的id来去修改更新A,这样是不行的。我们一般来说都会选择方法二。...原创 2022-08-18 21:58:34 · 274 阅读 · 0 评论 -
SQL优化(三):SQL优化实战
前两节基本是讲了SQL优化重要的工具大概思路,你连explain都看不明白,遇到慢查询一个SQL执行半天的情况,估计优化起来肯定无处着手。这节主要是SQL优化的具体实战,常见的一些问题。本文实际上也收到很多别的文章影响,收集了一些大牛的优化干货总结。一 优化原则1.提高数据的访问效率:设置合理的字段类型,能减少空间自然也就减少磁盘IO,同样设置索引通过索引访问也会减少IO提高效率2 减少访问次数:有时候很多次数据库交互才是导致访问时间长,服务超时的原因,比如说代码里面for循环里面数据库访问,循原创 2021-09-08 15:22:30 · 866 阅读 · 1 评论 -
mybatis的if else怎么写
书接上文关于SQL注入的问题,就是$符号换成#号,替代问题其实还好,大部分都是可以直接替代的,但是部分还是不行,举个例子group by 和 order by的字段就不行了。解决方案就是根据我传过去的值做判断,比如传的是:id, 实际上#会在id左右两边加上引号,导致数据库不认识这个东西,但是如果我认出这个字符串’id’我就条件判断为id来group by或者order by。但是好几个字段怎么处理,就要涉及到if else来判断然而mybatis只提供了if标签的写法,没有if else标签来处理。原创 2021-08-26 18:22:38 · 11708 阅读 · 0 评论 -
mybaits如何防止SQL注入:mybatis的${}和#{}
其实这个mybatis的${}和#{}区别和使用,算是很古早很常见的一个基础问题了?先说结论:尽可能使用#,不使用$,因为#可以防止SQL注入。如果记不清楚,就记一句话或者是口诀:不是所有事都能靠钱能解决($号是货币符号)为什么#可以防止SQL注入?#{} 占位符,${} 拼接符#占位符对应的SQL是占位作用的,也就是形成的SQL对应的位置会用引号括起来,对于SQL来说就是一个参数而已。$它是拼接符号,不是引号括起来的,它对应一串字符是可以与SQL拼在一起的,相当于成为SQL的一部分,这就很危险原创 2021-08-16 17:48:32 · 2396 阅读 · 1 评论 -
SQL优化(二):根据工具来SQL优化
前一章节,讲的是explain的使用以及他结果的解析,实际上工具远远不止explain一个,还有慢查询,SHOW PROFILE这些。而且光读工具的说明书也不行,还要实际的根据工具返回的结果找到原因,根据实际情况是物理宿主机配置太低了要升级或者读写分离之类的,还是SQL写的有问题要进行优化。一 优化思路这里从别的博主拿了一张图:S代表现象 A代表对应该采取的行动方案咱们可以根据图一步一步的分析解决问题:S1:观察服务器状态,是否存在周期性波动:存在:A1, 这明显和相关的业务或者代码处理原创 2021-05-20 16:17:47 · 167 阅读 · 0 评论 -
Order By 和 Group By的适用场景
Order By和Group By看起来很像,但实际上使用用途和适用场景实际上很大的不同。Order ByOrder By是排序根据所给字段进行排序select * from s order by sname desc, sage desc默认是升序,多个排序字段,采用的是从左到右的来进行条件排序,实际上数据库或者很多软件设计比如说浏览器什么的,都是采用做排序原则。Group Bygroup by是一个分组,条件相同的为一组,但是要注意分组会“合并”,加入100条数据,group by后可原创 2021-05-06 16:09:13 · 761 阅读 · 1 评论 -
SQL优化(一):分析利器Explain查看执行计划
SQL优化是一个老生常谈的问题,面试爱问,实际工作中也经常会遇到。我们先不谈SQL优化的技巧和实际应用,我们先思考一个问题,就是我们在面对一个SQL,效率不高进场超时,怎么去判断是哪个环节导致,比如是不是没有走索引,或者说因为全表扫描,或者大表关联小表导致导致本来本可以少扫描很多行结果多扫描了不少?该怎么看呢?这就提到了MySQL的分析语句Explain,以下是我在工作中遇到的一个总是超时的SQL,我对这个SQL的Explain,我们先掌握一下Explain的返回的信息的学习,否则你看都看不懂,怎么通过e原创 2021-04-23 18:11:18 · 415 阅读 · 0 评论 -
MySQL的一些基本操作
现在有的时候线上数据不能直接操作IDE工具,SQL是避免不了的,而且即使是开发也会用到一些语句,将常用的聚集在一起。一 字段a 表结构修改(1)增加字段TABLE关键字不能少ALTER TABLE xxx_order ADD `order_id` bigint(20) DEFAULT NULL COMMENT '订单ID'(2)修改字段这里要注意修改字段,也要把信息给全,不能说你只想改类型,结果只给一个类型这里修改的关键字是MODIFYalter table xxx_order MODI原创 2021-04-20 15:52:47 · 262 阅读 · 0 评论 -
关于CASE WHEN造成的查询缓慢的生产问题思考
因为做的是类似SAAS的系统,关于同一个业务没会有不同的视角,有管理员,有类别分类的,有特别逻辑处理的。总而言之涉及到很多方面,再加上历史遗留问题导致导致的数据问题,这SQL写起来真的酸爽。除了简单的关联,还要考虑到一个效率问题,最近就因为CASE WHEN导致了一个线上查询缓慢,差一点就要超过客户端设置的超时请求设置的一个问题。问题详情:现在有一个检查盘点资产的要求,之前只是要求在数据库有拿过资产的员工去发检查清单,检查单表 check检查详情(针对涉及到的资产每一个生成对应数据)check_d原创 2020-12-18 17:57:57 · 7212 阅读 · 1 评论 -
linux查看MySQL服务状态
最近自己的博客服务器总是挂掉,虽然用的是阿里云配置比较低的,但是之前也是好好的还相对比较稳定的,感觉这套路云又在搞事情。首先要看一下MySQL服务状态一般来说我们都会用命令交互命令mysql来service mysql status但实际会not found之类没有结果,可以试一下mysqldservice mysqld status果真是挂了,看别的帖子说可能是阿里云小内存会这样,但是自己忘了这个服务器数据库密码,先重启再说吧,本身就是一个博客网站也没啥东西。启动MySQL服务首先最原创 2020-10-27 10:22:15 · 18654 阅读 · 0 评论 -
SQL视图View的总结和使用
实际工作当中,数据交互查询返回结果,SQL你是没办法找其他的完美替代的,但有的时候还是会遇到一些很头痛的问题需要视图view来解决,比如以下场景:view日常使用场景场景一:有的时候,多个表并表条件查询,尤其是好几张表那种一起查询的那种,结果集来自“五湖四海”,也看不出那张表更“主要”一些,即使可能写出来的SQL相当的痛苦,各种select包一层select套了好几层,不说维护理解,就是修改起来也很难受,感觉本来改了一个地方,突然发现结果集又有别的问题,就是那种按起了葫芦有起了瓢那种,处处都能给你带来原创 2020-10-13 17:18:03 · 1531 阅读 · 0 评论 -
SQL条件变化:CASE WHEN使用和适用场景
实际业务中,很多处理都要靠SQL来维护,因为一旦业务复杂起来,真的是靠代码去判断过滤条件,真的会折磨死人,所以说SQL的学习真不能太放松,太忽视。这里分享的就是,关于自己实际开发中根据不同的条件,如何去选择对应过滤条件CASE WHEN,但是有的时候简单,根据条件去查找,如 单纯的xxx = #{xxx.xxxx}并能满足要求,举个几个实际例子吧:搭配其他函数做统计或者过滤拿统计班级成绩不及格,良,优秀来做例子,CASE WHEN和SUM函数搭配SELECT E_CODE, SUM(CASE原创 2020-10-13 15:10:40 · 771 阅读 · 0 评论 -
SQL 日期函数操作
突然发现自己现在好久没有产出,虽然在别的平台写了点,但是像这样,我是己遇到一些还不错的东西或者遇到一些的问题做一个内容或者说知识点输出,接近两个月没有些还是挺少的。今天的内容是关于,项目中会涉及到的关于日期的处理。我们日常处理业务一定会涉及到日期,一般来说我们都是用专门对应的datetime来保存的。(这里我只针对MySQL,别的关系型数据库虽然说大差不差,但实际上函数支持和用法还是有区别的)但是这样会遇到一个问题就是,和平常的数字,字符串不一样,日期的处理有他自己的特点,比如说平闰年,或者说是每个月原创 2020-09-18 10:27:12 · 492 阅读 · 0 评论 -
你会使用GROUP BY吗?
职业开始前两年,发现面试特别喜欢问SQL的问题,觉得不够高大上,觉得没有框架什么的高大上,但是当你处理实际的业务问题,发现SQL是避免不了的,SQL可以帮你解决一些你在代码上处理逻辑很麻烦的地方。即时现在有mybatis插件,可以不用写SQL代码也可以直接获取,但是一旦业务复杂,就避免不了这个问题,最后还是SQL来解决问题。这次说的是GROUP BY首先group by基本方法,大家基本了解,相当于是做一个聚合,比如说假设我有一个班级成绩表,记录所有人每次期中期末的成绩记录,我只想看一下多少人学生成绩原创 2020-07-13 11:36:33 · 460 阅读 · 0 评论 -
Blob类型介绍以及查看
最近看到一个字段的类型是Blob有点懵逼,从Navigate上看只能看到一个“Blob”,实际你去仔细看的话,分线字段大小不为空,而且每个大小不一样,说明该字段不仅不为空而且还有值且不一样。那这个Blob是什么呢?大名叫做binary large objectet 二进制大对象。它可以是一个图片一段声音也可以是一段文字,那怎么看它的值呢,我们可以根据不同状况来看。如果是图片的话直接通过工具,比如navigate查看图片的方式来看如果没有卡而已上一栏查看那里找到图片选项如果是文字的话可以通过工具,原创 2020-06-11 13:45:28 · 3453 阅读 · 0 评论 -
SQL IF语句实际应用--返回输出
SQL IF语句输出SQL IF语句我们有时会用到用到这个通常是对某个属性进行判断操作,类似我们编程那种三元表达式一样,但有时候业务上不会让你去简简单单去判断操作,还会让你把结果返回过去,通过接口展示出去在前端,你写一个带有if的查询结果你会发现根你之前定义的viewModel对应的属性名字对不上,对不上肯定不会输出。所以大概说一下实际怎么用if语句。IF 语句了解IF(expr1,expr...原创 2018-11-13 11:39:30 · 1547 阅读 · 0 评论 -
MySQL几个问题:Column 'XXXX' in where clause is ambiguous,去除重复项,mybatis报错
最近工作西街口,遇到MySQL,Mybatis相关的几个问题,大概讲一下问题发生情况,解决办法和原因。(一)Column ‘create_time’ in where clause is ambiguous问题:这个不关你是在IDEA的控制台看Mybatis报错还是在看Mysql返回来的抱错都能看到这个,“ambiguous”,谷歌翻译第一个结果是暧昧,可以的这报错,6666.解决:找到...原创 2018-11-30 19:27:38 · 25237 阅读 · 1 评论 -
MySQL8.0安装后不能正常使用的经历以及解决办法
装了个MySQL给自己的阿里云服务器,毕竟钱不能白花要提高自己Linux上的经验,要多折腾实践蹂躏(实际上操作过程中是我被蹂躏的一方)一下才行。(1)阶段1:登录不了MySQL首先MySQL安装完成,我装的是MySQL最近版本8.0有最新的用最新的了。发现了一个问题就是我设置不了密码也登录不进去,报错ERROR 1045 (28000),搜了网上的一个帖子在my.cnf上添加一个skip-g...原创 2019-01-09 17:53:38 · 2110 阅读 · 0 评论 -
mybatis上的SQL使用心得
mybatis应该是目前大多数商业化项目所使用的,之前在银行外包做银行项目还是现在在做商城类的都是mybatis。毕竟自己写SQL根据业务逻辑整理而且优化调优自己来掌握。在mybaits配置文件上写SQL肯定和你在navicate上或者其他的客户端甚至是在服务器端写SQL有所区别的。(1)#和$首先为什么会用到这样的符号呢,这符号SQL中可没有?其实这个就是解决动态传参的东西,发过来的请求不...原创 2019-03-07 15:16:07 · 246 阅读 · 0 评论 -
SQL匹配条件不起作用怎么回事?----SQL左连接,右连接和内连接的条件放置位置
实际很多时候写代码写的都是业务代码,业务代码又以SQL最为常见。根据业务我们会设置很多关于连接的地方,左连接,右连接,内连接的使用不当很可能导致SQL达不到预期,可能给人感觉“SQL执行只走了一半”或者“中间有的地方跳过去,条件没有匹配返回的结果集是错误的”想看如何解决的请看第二部分,第一部分是概念详情以及原理一 概念和原理首先要知道左连接 右连接 内连接区别我们以左连接作为例子,A ...原创 2019-04-25 22:06:08 · 1783 阅读 · 0 评论 -
count(*)和count(1)的区别和性能分析
查询记录数时会用到count,于是就有个问题。有的人用的是count() 有的用的是count(1),区别是什么,这两个的使用场景是什么?我这里主要针对的是MySQL,也许可能在别的引擎就不一定,比如别的搜索引擎会不会对count()有优化这个我就不确定。首先你要你要知道这个count()是一个聚合函数,括号里面不仅仅可以填和1还可以填别的比如说字段什么的。count(1)如果你给的条件是主键是...原创 2019-04-24 15:06:39 · 20509 阅读 · 4 评论 -
MySQL锁表原因,解决方法以及修改表结构的正确姿势
首先修改表的结构都有可能会导致锁表,之前用过DB2,DB2修改表结构必锁表,但是解锁也很简单有专门的关键词regon来解锁表,但MySQL不一样。原因:MySQL(5.6以后,支持在线DDL,支持操作与查询的并发)其实你更改表结构不一定会锁表,但是还是会有概率锁表的。首先了解一下MySQL的两种表锁,一种是lock table的表锁,一种是元数据锁 metadata Lock。第一种表级...原创 2019-05-15 16:24:29 · 7110 阅读 · 1 评论 -
MySQL:SQL执行时间很长没结果(没有锁表的情况下)
一般来说一条SQL执行时间很长没有结果,可以看表有没有被锁。执行show OPEN TABLES where In_use > 0;来看有没有表被锁住,有结果就是被锁表了。但有的时候并不一定是锁表导致SQL长时间执行没结果,或者人家直接就报错返回告诉你没有别表被锁。这时候你可能要从事务的方面去想。是不是有一个事务正在执行或者别的状态导致的,我就遇到类似的一个问题。问题:执行长时间没...原创 2019-07-23 20:59:01 · 6310 阅读 · 0 评论 -
MySql字段全部替换以及字段部分替换
之前我写过关于字段拼接,用到的SQL函数式contact,那我想操作某个字段,将里边的东西进行替换可以吗?当然可以,这会用到的是SQL函数Replace。以下内容在MySQL上测试过,可能不同的数据库要求存在差异,但是基本大多数数据库都支持Replace的。语法:UPDATE 表名 set 字段名 = REPLACE(字段名,‘要替换的内容’,‘替换成的内容’);也可以写成: UPDATE 表...原创 2019-09-10 19:19:06 · 4620 阅读 · 0 评论 -
check the manual that corresponds to your MySQL server version for the right syntax的解决方法
我在导入一组数据后,进行查询相关操作总是遇到check the manual that corresponds to your MySQL server version for the right syntax的提示。明明写的格式也是对的但就是总报这个提示,百思不得其解。 比如我进行查询tdb_goods表中超极本的价格: select goods_price from tdb_good原创 2016-02-25 00:54:00 · 3786 阅读 · 0 评论