MySQL
文章平均质量分 76
挽风如你
别看我 我就是一个学渣
展开
-
SQL日期时间整理
因为经常在MySQL中遇到关于日期时间的问题经常不知道如何选择,今天就整理一下关于SQL日期的一些函数使用,遇到我没记录的我会更新的,所以请关注我吧!目录1.返回当前日期和时间1.1curdate()函数1.2 curtime()函数1.3 Now()函数1.4sysdate()函数 返回系统时间2.计算两个日期之间的相差天数3.获取日期其中部分3.1 day() 函数3.2 last_day()函数3.3 year()函数3.4 extract函数3.5 month()函数4.日期相加相减4.1 dat原创 2021-03-26 14:21:05 · 565 阅读 · 1 评论 -
MYSQL中where条件后写上1=1 是什么意思?
我们在实际的开发项目中经常会出现条件语句,但有些条件不是必须要传的而是可选的。就比如项目中出现模糊搜索,那么此时在mysql就会出现判断是否传值。来。直接看代码:例如String sql="select * from table_name where 1=1";if( conditon 1) { sql=sql+" and var2=value2";}if(conditon 2) { sql=sql+" and var3=value3";}这里的if是Java提供演示w原创 2021-03-25 22:17:02 · 7007 阅读 · 2 评论 -
delete后加 limit是个好习惯么
在业务场景要求高的数据库中,对于单条删除和更新操作,在delete和update后面加limit 1绝对是个好习惯。比如,在删除执行中,第一条就命中了删除行,如果SQL中有limit 1;这时就return了,否则还会执行完全表扫描才return。效率不言而喻。那么,在日常执行delete时,我们是否需要养成加 limit 的习惯呢?是不是一个好习惯呢?在日常的SQL编写中,你写delete语句时是否用到过以下SQL?delete from t where sex = 1 limit 100;原创 2021-03-07 15:32:30 · 158 阅读 · 0 评论 -
事务的本质和死锁的原理
仅以MySQL和Spring为例,本文不介绍事务和锁的概念。本文使用伪代码表示方法代码,仅仅表达方法的意义及事务注解。事务的形状在我心中,事务一直是这个样子的x轴是上锁的资源,y轴是消耗的时间,事务方块随着时间的流逝向下移动,当碰触x轴时资源加锁,越过x轴时资源解锁上图是对于方法a的事务形状,我起名【 事务方块】。@Transactionalfunction a(){ 对A表修改,耗时五秒}一、多事务当一个方法调用多个被事务注解的子方法时情况是上图是对于方法abc调用原创 2021-02-24 20:33:47 · 358 阅读 · 0 评论 -
坑,MySQL中 order by 与 limit 混用,分页有BUG!
在MySQL中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题。比如现在有一张user表,表结构及数据如下:现在想根据创建时间升序查询user表,并且分页查询,每页2条,那很容易写出sql为:select * from user order by create原创 2021-02-24 20:04:29 · 220 阅读 · 0 评论 -
Navicat卡死动不了怎么办?show processlist 神器来救场!
今天在同步测试数据时,网突然断了,等到重连之后,发现表打不开了。可以看到表的数据长度已有112192kb,可惜打不开了。打不开,就准备删掉重来。事情往往没这么简单,果然删不掉,truncate也不行,然后navicat卡死,遂登上数据库,执行dorp操作,还是不行。估计是网络错误,导致了一些奇怪的事情发生。那么就一起看看,到底发生了什么吧。神器登场。show full processlist;show full processlist 返回的结果是实时变化的,是对mysql链接执行的现场原创 2021-02-24 19:57:52 · 6946 阅读 · 0 评论 -
快速提升性能的SQL语句,建议收藏
本文会提到 52 条 SQL 语句性能优化策略。1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引。2、应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,创建表时 NULL 是默认值,但大多数时候应该使用 NOT NULL,或者使用一个特殊的值,如 0,-1 作为默认值。3、应尽量避免在 WHERE 子句中使用 != 或 <> 操作符。MySQL 只有对以下操作符才使用索引:<,<=,=,>,>=,原创 2021-02-20 16:34:11 · 210 阅读 · 0 评论 -
为什么不建议把数据库部署在Docker容器内?
近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署的容器中吗?这个问题不是子虚乌有,因为在网上能够找到很多各种操作手册和视频教程,这里整理了一些数据库不适合容器化的原因供大家参考,同时也希望大家在使用时能够谨慎一点。目前为止将数据库容器化是非常不合理的,但是容器化的优点相信各位开发者都尝到了甜头,希望随着技术的发展能够更加完美的解决方案出现。Docker不适合部署数据库的7大原因1、数据安全问题不要将数据储存在容器中,这也是 Dock原创 2021-01-10 20:28:04 · 165 阅读 · 0 评论 -
MySQL中,当update修改数据与原数据相同时会再次执行吗?
一. 背景本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?二、测试环境MySQL5.7.25Centos 7.4三、binlog_format为ROW1、参数2. 测试步骤session1session2session13、总结在binlog_format=row和binlog_row_image=FULL时,由于MySQL 需要在 binlog 里面记录所有的字段,所以在读数据的时候就会把所有数据都读出原创 2021-01-03 20:08:46 · 2599 阅读 · 0 评论 -
太神奇的 SQL 查询经历,group by 慢查询优化~
问题背景现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下:我在测试环境构造了500万条数据,模拟了这个慢查询。简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。说一下app_account字段的分布情况,随机生成了5000个不同的随机数,然后分布到了这500万条数据里,平均来说,每个app_account都会有1000个是重复的值,种类共有5000个。看执行计划可以看到,group by字段上我是加了索原创 2020-12-05 18:31:26 · 255 阅读 · 0 评论 -
MySQL 实现一个简单版搜索引擎,真是绝了!
本文教大家使用 MySQL 全文索引来实现一个简单版搜索引擎。前言只有Innodb和myisam存储引擎能用全文索引(innodb支持全文索引是从mysql5.6开始的)char、varchar、text类型字段能创建全文索引(fulltext index type)全文索引的基于关键词的,如何区分不同的关键词了,就要用到分词(stopword)英文单词用空格,逗号进行分词;中文分词不方便(一个句子不知道怎样区分不同的关键词)内置分词解析器ngram支持中文,日文,韩文(将句子分成固定数字的短原创 2020-12-05 18:00:11 · 630 阅读 · 0 评论 -
谈谈MySQL是如何解决幻读问题的?
一,前言:事务的隔离级别有四种,读未提交,读已提交,可重复读和串行化,下面结合具体的问题,在mysql中,innodb引擎是怎么解决幻读的?二,详情:一张图胜过千言万语:原创 2020-12-05 17:51:15 · 179 阅读 · 0 评论 -
SQL性能优化,太太太太太太太有用了!
前言本文主要针对的是关系型数据数据库MySql。先简单梳理下Mysql的基本概念,然后分创建时和查询时这两个阶段的优化展开。基本概念简述1 .逻辑架构第一层:客户端通过连接服务,将要执行的sql指令传输过来第二层:服务器解析并优化sql,生成最终的执行计划并执行第三层:存储引擎,负责数据的储存和提取2 .锁数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端可以在同一时刻读取同一个资源。写锁是排他的,并且会阻塞其他的读锁和写锁。简单提下乐观锁和悲观锁原创 2020-12-05 16:30:22 · 129 阅读 · 0 评论 -
来,教你写一手好SQL!
本人负责的项目主要采用阿里云数据库 MySQL,最近频繁出现慢 SQL 告警,执行时间最长的竟然高达 5 分钟。导出日志后分析,主要原因竟然是没有命中索引和没有分页处理。其实这是非常低级的错误,我不禁后背一凉,团队成员的技术水平亟待提高啊。改造这些 SQL 的过程中,总结了一些经验分享给大家,如果有错误欢迎批评指正。MySQL 性能1. 最大数据量抛开数据量和并发数,谈性能都是耍流氓。MySQL 没有限制单表最大记录数,它取决于操作系统对文件大小的限制。《阿里巴巴 Java 开发手册》提出单表原创 2020-12-05 16:08:32 · 241 阅读 · 0 评论 -
整理的MySQL数据库设计规范,值得收藏!
概述MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。无意中从github上看到一个大佬的MySQL数据库设计规范,顺便在这里分享一下。1. 规范背景与目的MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更原创 2020-11-15 22:00:51 · 177 阅读 · 1 评论 -
厉害!竟然可以不用count,来解决查找是否“存在“的问题
根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要Select count(*) 呢?1. 目前多数人的写法多次回顾代码时,发现如现现象:业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下。#### SQL写法:SELECT count(*) FROM table WHERE a = 1 AND b = 2#### Java写法:int nums = xxDao.countXxxxByXxx(param原创 2020-11-15 21:42:01 · 311 阅读 · 0 评论 -
认为count(1)比count(*)效率高
1.尽量避免大事务操作,提高系统并发能力。count(1) and count()当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count()用时多了!从执行计划来看,count(1)和count()的效果是一样的。但是在表做过分析之后,count(1)会比count()的用时少些(1w以内数据量),不过差不了多少。如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。因为count(),自动会优化指定到那一个字段。所以没必要去count原创 2020-11-09 22:27:06 · 191 阅读 · 0 评论 -
30种SQL语句优化
在SQL查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结一些方法,供大家参考。对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可原创 2020-11-09 22:15:43 · 127 阅读 · 0 评论 -
delete、truncate、drop的区别有哪些,该如何选择?不妨进来看看
先看一个故事:上周同事小姐姐问我:“哈哥你看,我发现MySQL有bug,我下午为了清理磁盘,明明删除了100万条MySQL数据,磁盘不仅没有变小,反而更满了呢??”那你是怎么删除的?“delete from table 呀”“怪不得,其实要删除MySQL数据是有好几种方式的,有些场景下是不应该用DELETE的,比如你这种情况。好了,让我来给你讲一下吧。”MySQL删除数据的方式都有哪些?咱们常用的三种删除方式:通过 delete、truncate、drop 关键字进行删除;原创 2020-10-26 23:32:07 · 294 阅读 · 0 评论 -
使用sql语句查出每门课成绩都大于80分的学生姓名
根据表的结构来使用sql语句查询建表SQL如下:create table stu_grade(name varchar(20),coursevarchar(20),grade int);– 插入数据INSERT INTO stu_grade VALUES (‘张三’, ‘语文’, ‘81’);INSERT INTO stu_grade VALUES (‘张三’, ‘数学’, ‘75’);INSERT INTO stu_grade VALUES (‘李四’, ‘语文’, ‘76’);INS原创 2020-10-21 15:25:28 · 30223 阅读 · 1 评论