![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
文章平均质量分 64
leo_messi94
这个作者很懒,什么都没留下…
展开
-
mysql查询字段未加引号问题及隐式转换
最近线上出了个问题,用户明明没有投票,却提示已投票,我查询数据,刚开始没有查出数据,后来却查出数据了,以为没有问题,后来以为是插入的时候通过int类型插入,导致varchar类型的索引没有添加这条索引(天真的想法),再后来看到查出来的数据和我查询的数据并不一致,最后一位不太相同,知道应该是发生了mysql隐式转化问题。接下来就来研究下不加引号或者加引号的情况。原创 2023-04-19 14:35:25 · 1194 阅读 · 1 评论 -
Mysql学习(十一) -- 常见问题处理
null值会占用更多的字节,且会在程序中造成很多与预期不符的情况,比如错误的使用count(),group等。原创 2023-04-16 19:04:56 · 705 阅读 · 0 评论 -
Mysql优化(一)-- sql语句优化概述及数据库优化
设计数据表时应尽量遵循范式理论的规约,尽可能的减少冗余字段,让数据库设计看起来精致、优雅。通过建立中间表,将需要通过联合查询的数据插入到中间表中,然后将原来的联合查询改为对中间表的查询。冗余字段的值在一个表中修改了,就要想办法在其他表中更新,否则就会导致数据不一致的问题。表的规范化程度越高,表和表之间的关系越多,需要连接查询的情况也就越多,性能也就越差。对于字段较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来形成新表。因为当一个表的数据量很大时,会由于使用频率低的字段的存在而变慢。原创 2023-04-16 18:53:06 · 400 阅读 · 0 评论 -
Mysql学习(九)-- mysql字段的使用
可以使用 BLOB (binary large object),用来存储二进制大对象的字段类型。原创 2023-04-16 17:32:49 · 612 阅读 · 0 评论 -
Mysql学习(八)-- mysql日志
error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过log-error=/var/log/mysqld.log 执行mysql错误日志的位置。在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow。原创 2023-04-14 18:10:21 · 785 阅读 · 0 评论 -
Mysql group_concat函数长度问题
今天出了个线上bug,先通过其他手段把bug避免了,然后打日志查看具体原因,发现是一个sql查出来的字段内容少了很多,一查询原来是group_concat函数最大长度只有1024,超过长度会被截取。特别注意:只对当前会话有效。原创 2022-10-09 16:27:21 · 607 阅读 · 0 评论 -
Mysql学习(六)-- innodb如何避免幻读及MVCC和间隙锁详解
在之前的文章中详细的介绍了 MySQL 中的事务和隔离级别,在并发访问数据库造成的问题(脏读、不可重复读、幻读),而 MVCC 就是在尽量减少锁使用的情况下高效避免这些问题。MySQL 四大隔离级别:MVCC 全称 Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。同一行数据平时发生读写请求时,会上锁阻塞住。但 MVCC 用更好的方式去处理读写请求,做到在发生读写请求冲突时不用加锁。原创 2022-10-08 22:46:52 · 1421 阅读 · 3 评论 -
Mysql优化(二) -- order by及limit优化
数据:给age和salary添加组合索引:order byorder by的两种排序方式:FileSort:通过对返回数据进行排序,所有不是通过索引直接返回排序结果的排序都叫FileSort排序using index:通过有序索引顺序扫描直接返回有序数据,不需要额外排序,操作效率高FileSort优化:通过创建合适的索引能够减少FileSort的出现,但是在某些情况下,条件限制不能让FileSort小时,那就需要加快FileSort的排序操作。对于FileSort,Mysql有两种排序原创 2022-03-14 16:09:26 · 2456 阅读 · 2 评论 -
Mysql学习(七)-- 执行计划explain
字段解释:原创 2022-03-13 16:15:05 · 1108 阅读 · 0 评论 -
Mysql学习(十)-- Mysql子查询关键字的使用(in和exists)
1. all1.1 格式:1.2 特点:all:与子查询返回的所有值比较为true则返回trueall可以与=,>=,>,<,<=,<>结合使用,分别表示等于,大于等于,大于,小于,小于等于,不等于其中的所有数据大于all表示指定列中的值必须要大于子查询集中的每一个值,即必须要大于子查询集的最大值;如果是小于即小于子查询中的最小值。1.3 操作:2. any(some)1.1 格式:1.2 特点:any:与子查询返回的所有值比较为true则原创 2022-03-09 18:10:19 · 10207 阅读 · 0 评论 -
Mysql连接Join相关问题
1. union的使用:union和union all同样是拼接结果,但是union会进行去重,而union all不会1.1 union可以看到union将两个sql的结果拼接了,但是将他们重复的数据去掉了1.2 union all可以看到union all是不管上下什么数据,直接拼接(当然,字段要对应)...原创 2022-03-09 14:47:48 · 490 阅读 · 0 评论 -
Mysql学习(四) -- 分库分表
一、单库单表存在的问题假设你要设计一个电商网站,在一开始,User表、Order表、Product表等等各种表都在同一个数据库中,每个表都包含了大量的字段。在用户量比较少,访问量也比较少的时候,单库单表不存在问题。但是公司可能发展的比较好,用户量开始大量增加,业务也越来越繁杂。一张表的字段可能有几十个甚至上百个,而且一张表存储的数据还很多,高达几千万数据,更难受的是这样的表还挺多。于是一个数据库的压力就太大了,一张表的压力也比较大。试想一下,我们在一张几千万数据的表中查询数据,压力本来就大,如果这张表还原创 2020-07-27 23:02:44 · 160 阅读 · 3 评论 -
Mysql学习(三)-- mysql内部技术架构(存储引擎)
前言数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎。引擎查看MySQL给开发者提供了查询存储引擎的功能,可以使用:SHOW ENGINES命令来查看MySQL使用的引擎,命令的输出为(我用的Navicat Premium):看到MySQL给用户提供了这么原创 2020-07-22 23:43:04 · 201 阅读 · 0 评论 -
Mysql学习(二)-- 事务和锁
事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。原创 2020-07-22 20:59:59 · 738 阅读 · 2 评论 -
Mysql学习(一)-- 索引
A table can contain a maximum of 64 secondary indexes.A maximum of 16 columns is permitted for multicolumn indexes. Exceeding the limit returns an error.ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed原创 2020-07-22 18:32:08 · 1411 阅读 · 1 评论 -
阿里云linux安装mysql8.0.20
删除老版本的mysql查看mysql的安装情况:rpm -qa|grep -i mysql停止mysql服务,删除mysqlrpm -ev mysql-5.1.73-8.el6_8.x86_64rpm -ev mysql-libs-5.1.73-8.el6_8.x86_64注意:可能会抛依赖错误错 error:Failed dependencies,则加上 --nodeps不检查依赖关系删除,命令如下rpm -e --nodeps mysql-libs-5.1.73-8.el6_8.x86_6原创 2020-05-27 16:24:23 · 723 阅读 · 0 评论 -
mysql学习(五)-- 数学、日期、字符串以及窗口函数的使用
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 7天 SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名) 近30天 SELECT * FROM 表名 where DATE_原创 2020-05-19 15:44:00 · 1253 阅读 · 1 评论 -
Mysql 存在就更新,不存在就添加(sql语句)
INSERT 语句的一部分,如果指定 ON DUPLICATE KEY UPDATE ,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE,如果不会导致唯一值列重复的问题,则插入新行sql 语句原型:insert into table (player_id,award_type,num) values(20001,0,1) on DUPLICATE key update num=num+values(num)在工作中抽奖程序需要模仿王转载 2020-05-19 15:42:23 · 1221 阅读 · 0 评论 -
#{}和${}使用上的区别
我们都知道在mybatis中,使用#{}可以防止sql注入攻击。那为什么还需要${}存在呢?$ {}的存在当然有他的原因,比如我们在以下2种情况时,需要使用$ {}:通过param传入的是数据库表名或者字段名时order by的字段时通过param传入时...原创 2020-05-19 15:36:28 · 175 阅读 · 0 评论 -
mysql使用not in 包含null值的问题
注意!!!select * from user where uid not in (a,b,c,null);这个sql不回返回任何结果。要避免not in的list中出现null的情况。另外:–如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除)–如果null参与比较运算,则结果可视为false。(例如:>=,<=,<...原创 2020-05-07 18:18:01 · 4631 阅读 · 0 评论 -
mysql中使用groupby时,避免将null聚合到一起
来看个sql:select id, title, album_uuid from video where class_id = 8 AND STATUS = 9 AND deleted = 0 GROUP BY album_uuidORDER BY online_time desc limit 4;结果:结果不符合我想要的要求,因为这里把album_uuid等于null的都聚合到一...原创 2020-05-06 18:41:58 · 1316 阅读 · 1 评论 -
mysql给每条数据的某一个字段生成不同的随机数
例:UPDATE blog a-- 利用LEFT JOIN的方式进行关联修改LEFT JOIN(-- 先通过查询的方式给每一条数据生成对应的10-500之间随机数 SELECT uuid , -- 转为int CAST(rand() * 10 + rand() * 500 AS SIGNED) num FROM blo...原创 2020-03-14 01:12:14 · 953 阅读 · 0 评论 -
mysql报错:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
错误:Incorrect string value: ‘\xF0\x9F…’ for column ‘XXX’ at row 1这个问题,原因是UTF-8编码有可能是两个、三个、四个字节。Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。我的解决方案是这样的1. 在mysql的安装目录下找到my.ini,作如下修改:[mysqld]cha...转载 2019-12-26 18:30:56 · 3267 阅读 · 0 评论 -
join 索引失效原因调查
实现原因1:字符集不同最近再写一个很简单的连表查询时,明明on的2个字段都加了唯一索引,但是索引并没有生效,后来经过查询发现是因为这2个字段的字符集并不相同,一个utf8一个是utf8mb4sql:select * from imitate i left join video v on i.video_uuid = v.uuid;没有修改字符集时的语句解释:(i表的rows数据不一致的原因时...原创 2019-11-27 01:19:21 · 1042 阅读 · 0 评论 -
left join的执行顺序问题
问题:imitate表中1691条数据,video表中4000多条数据,通过video表的uuid和imitate的video_uuid关联,imitate的video_uuid全部包含在video的uuid中,此时使用left join和inner join返回的结果集并无区别,可是使用inner join的效率是是使用left join的2倍。select * from imitate i...原创 2019-11-13 21:30:53 · 1186 阅读 · 0 评论