MySQL
文章平均质量分 59
MySQL
幽篁晓筑
这个作者很懒,什么都没留下…
展开
-
MySQL 隐式类型转换导致索引失效问题
比如将查询条件由 1005 变成 1005aa,发现也同样能查询到 1005 的数据,这是因为MySQL在进行字段值比较的时候,发生了隐式类型转换,将 1005aa 转换成浮点型 1005 进行比较,所以能查询出 1005 的记录。首先发现 no_str 索引失效了,并且结果也不是预期结果,会将额外的数据查询出来,比如查询 1005 会把 1005aa 的记录也查出来,这是因为MySQL进行了隐式类型转换,换成了浮点型进行比较。这个没什么说的,不管是查询结果和使用索引都达到预期效果。原创 2022-10-15 15:32:29 · 1887 阅读 · 0 评论 -
MySQL提示sql_mode=only_full_group_by解决办法
对于group by聚合操作,select中的列只能是出现在group by中的列,使用聚合函数除外,如max()、min()等。这个方法的好处是不用重启MySQL生效(需要注意的是在当前会话实例中是不生效的),坏处是重启后会恢复原样。在MySQL 5.7后MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。会报sql_mode=only_full_group_by错误说明写的SQL语句不严谨,将分到同一组的数据里第一条数据的指定列值作为返回数据。如果语句太多,变动太大,可以改数据库配置。原创 2022-09-11 16:39:22 · 4285 阅读 · 0 评论 -
MySQL SUBSTRING_INDEX截取字符串
MySQL SUBSTRING_INDEX截取字符串原创 2022-06-12 16:26:31 · 1095 阅读 · 0 评论 -
MySQL实现 group_concat 排序
MySQL支持实现group_concat() 内部自定义排序:实例:新建一张表 reward,表中数据如下:SQL:SELECT uid, GROUP_CONCAT(money ORDER by money DESC) AS money_desc FROM reward GROUP BY uid DESC;结果:使用其他字段也一样的效果:SQL:SELECT uid, GROUP_CONCAT(id ORDER by money DESC..原创 2022-05-01 19:30:49 · 6101 阅读 · 3 评论 -
MySQL 中 bigint、int、mediumint、smallint、tinyint 有符号和无符号的取值范围
想要了解取值范围首先需要知道的是 bit 和 Byte 的概念bit :位二进制数系统中,位通常简写为 "b",也称为比特,每个二进制数字 0 或 1 就是一个位(bit)。位是表示信息的最小单位,其中 8 bit 就称为一个字节(Byte)。Byte :字节字节(Byte)是用于计量存储容量的一种计量单位,是计算机中表示存储空间最基本的容量单位,字节通常简写为 "B"。bit 与 Byte数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比.原创 2021-09-21 11:00:06 · 1133 阅读 · 0 评论 -
MySQL执行一条查询语句的过程
执行流程如下图所示,我们可以看到当向 MySQL 发送一个请求时,MySQL 到底做了什么:客户端发送一条査询给服务器。 服务器先检查査询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进人下一阶段。 服务器端进行 SQL 解析、预处理,再由优化器生成对应的执行计划。 MySQL 根据优化器生成的执行计划,调用存储引擎的 API 来执行查询。 将结果返回给客户端。查询缓存在解析一个查询语句之前,如果查询缓存时打开的,那么 MySQL 会优先检查这个查...原创 2021-09-11 10:08:08 · 779 阅读 · 2 评论 -
MySQL触发器的使用
一、MySQL创建触发器语法:CREATE TRIGGER trigger_name{BEFORE|AFTER}{DELETE|INSERT|UPDATE}ON table_nameFOR EACH ROWBEGINEND;语法说明:trigger_name:触发器名称。{BEFORE|AFTER}:before、after,表示触发时机,是执行前还是执行后触发。{DELETE|INSERT|UPDATE}:delete、insert、update表示触发事件。table_nam原创 2020-11-23 17:42:45 · 318 阅读 · 0 评论 -
MySQL中判断一个字符串中是否存在另一字符串
MySQL中有很多方法判断一个字符串中是否存在另一字符串,像比较常用的 like、in 这里就不多介绍了,今天主要介绍一下 find_in_set() 和 locate() 的使用。一、find_in_set(str, strlist)find_in_set() 返回 strlist 中 str 所在位置的索引,其中 strlist 必须是以逗号分隔,要不然无效。实例:SELECT FIND_IN_SET('a', 'aa,a,b,c,d'); // 2SELECT FIND_IN_SET(原创 2020-08-09 10:57:12 · 1052 阅读 · 0 评论 -
MySQL查询重复数据
假设有一个用户表 user,数据如下:1、查询表中 uid 重复的数据SELECT id, uid, nameFROM USERWHERE uid IN (SELECT uid FROM USER GROUP BY uid HAVING COUNT(uid) > 1);2、查询表中重复数据,排除最小idSELECT id, uid, nameFROM userWHERE uid IN (SELECT uid FROM use原创 2020-05-16 18:27:02 · 3716 阅读 · 0 评论 -
MySQL连接查询INNER JOIN、LEFT JOIN、RIGHT JOIN
一、内连接(INNER JOIN)获取两个表中字段匹配关系的记录,需要两个表都满足条件的数据才会返回。如下图阴影部分所示区域。实例:有一张表table_a,数据如下:表table_b,数据如下:内连接SQL(也可以省略INNER,直接用JOIN):SELECT a.aid, a.aname, b.bid, b.bname FROM table_a AS a INNER JOIN...原创 2020-05-02 16:32:13 · 224 阅读 · 0 评论 -
MySQL事务的特性和隔离级别
一、事务的概念事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。可以通过一个银行事例来解释事务的必要性。假设有以下场景:现在用户A想通过银行转账200元给用户B,那么至少需...原创 2020-05-02 12:08:50 · 192 阅读 · 0 评论 -
MySQL中DISTINCT与GROUP BY计数原理分析
通常,我们要统计一个字段有几种值有两种方法:在语句中使用DISTINCT或者GROUP BY,配合count进行查询。例如:SELECT count(DISTINCT col) FROM table;SELECT count(1) FROM (SELECT 1 FROM table GROUP BY col) alias;那么这两者的效率究竟如何呢?网上的答案可谓前篇一律,大多说GROU...转载 2019-11-17 10:30:31 · 835 阅读 · 0 评论 -
如何开启MySQL慢查询日志
一、开启慢查询日志首先需要了解四个参数:slow_query_log # 是否开启慢查询日志,默认OFF,开启则设置为 ON。slow_query_log_file # 慢查询日志文件存储位置。 log_queries_not_using_indexes # 是否把没有使用到索引的SQL记录到日志中,默认OFF,开启则设置为 ON。long_query_time # ...原创 2019-11-10 13:37:34 · 542 阅读 · 0 评论 -
MySQL中使用group_concat遇到的坑
在使用group_concat的过程中遇到个问题,这里记录一下:在MySQL中有个配置参数group_concat_max_len,它会限制使用group_concat返回的最大字符串长度,默认是1024。查询group_concat_max_len大小:show variables like 'group_concat_max_len';修改group_concat...原创 2019-05-25 11:31:18 · 2964 阅读 · 0 评论 -
mysql中清空表数据,并重置主键为1
mysql中清空表数据,并重置主键为1清空表数据,并重置主键为1:truncate table table_name;删除表中指定数据,不影响表结构,后面可以加where条件delete from table_name;删除表drop table table_name;...原创 2018-08-29 20:49:08 · 4119 阅读 · 0 评论 -
MySQL批量插入数据库的几种方法实现
MySQL批量插入数据库的几种方法实现这里介绍几种批量导入数据库的方法,并介绍一下各自性能优缺点,以下代码是用tp5实现的。首先批量导入一般会涉及到服务器超时的问题,可以修改php.ini文件的 max_execution_time 参数。方法一:循环单个插入,这种方法数据量大时会很慢,一般不推荐使用。 /** * 方法一,循环单个插入 */ p...原创 2018-09-05 21:38:41 · 2882 阅读 · 0 评论 -
MySQL时间戳与日期格式的相互转换
MySQL时间戳与日期格式的相互转换,PHP时间戳与日期格式的相互转换MySQL:获取当前时间SELECT NOW(); // 2018/10/11 14:22:51时间日期格式转换成时间戳格式,UNIX_TIMESTAMP()SELECT UNIX_TIMESTAMP(NOW()); // 1539238930时间戳格式转换成时间日期格式,FROM...原创 2018-10-12 20:29:44 · 379 阅读 · 0 评论 -
MySQL 数据库中如何存储经纬度
数据库保存经纬度,需要采用什么数据类型,小数点应该精确多少位? 赤道周长(米) 度数(度) 40076000 360 111322.2222 1 11132.22222 0.1 1113.222222 0.01 111.3222222 0.001 11.13222222 0.0001 1.113222222 0...转载 2018-11-06 22:32:58 · 19173 阅读 · 0 评论 -
《高性能MySQL》笔记——MySQL建表数据类型的选择
前段时间看了《高性能MySQL》中的选择优化的数据类型,这里主要是做一下笔记。首先数据选择有几个简单原则:更小的通常更好。一般情况下,应该尽量使用可以正确存储数据的最小数据类型。例如只需要存 0~200,tinyint unsigned 更好。更小的数据类型通常更快,因为它们占用更少的磁盘、内存和 CPU 缓存,并且处理时需要的 CPU 周期也更少。 简单就好。简单数据类型的操作通常需要...原创 2018-11-07 22:31:49 · 332 阅读 · 0 评论 -
MySQL索引的使用及注意事项
索引是存储引擎用于快速找到记录的一种数据结构。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高几个数量级,“最优”的索引有时比一个“好的”索引性能要好两个数量级。索引可以包含一个(单列索引)或多个列(组合索引)的值。想要使用组合索引首先要了解一个原则:最左前缀原则。如果索引包含多个列,那么列的顺序十分重要,因为 MySQL 只能高效地使用索引的最左前缀列。最...原创 2018-11-17 12:21:07 · 430 阅读 · 0 评论 -
MySQL语句的优化
1、使用limit当不需要取出全部数据时,在查询后面加上limit限制。2、select *每次看到select * 的时候都需要用怀疑的眼光审视,是不是真的需要返回全部的列。3、重复查询相同的数据有时可能会重复执行相同的查询,比如在用户评论的地方需要查询用户头像url,如果用户多次评论,可能就会反复查询这个数据。比较好的方案是,当初次查询的时候将这个数据缓存起来,需要的时候从...原创 2019-03-02 22:41:34 · 387 阅读 · 0 评论 -
SQL分页过多时, 如何优化
问题:我们经常会使用到分页操作,这里有个问题,在偏移量非常大的时候,它会导致MySQL扫描大量不需要的行然后再抛弃掉。如:SELECT id, name FROM A ORDER BY id DESC LIMIT 10000, 20;上述这条SQL语句需要查询10020条记录然后只返回最后20条。前面的10000条记录都将被抛弃,这样代价非常高。方法一、延迟关联...原创 2019-03-15 16:49:31 · 854 阅读 · 0 评论 -
MySQL中group by 与 order by 一起使用排序问题
假设有一个表:reward(奖励表),表结构如下:CREATE TABLE test.reward ( id int(11) NOT NULL AUTO_INCREMENT, uid int(11) NOT NULL COMMENT '用户uid', money decimal(10, 2) NOT NULL COMMENT '奖励金额', datatime dat...原创 2019-05-25 11:01:15 · 31679 阅读 · 4 评论 -
MySQL实现排名并查询指定用户排名功能,并列排名功能
MySQL实现排名并查询指定用户排名功能表结构:CREATE TABLE test.testsort ( id int(11) NOT NULL AUTO_INCREMENT, uid int(11) DEFAULT 0 COMMENT '用户id', score decimal(10, 2) DEFAULT 0.00 COMMENT '分数', PRIMARY K...原创 2018-04-22 13:11:56 · 8959 阅读 · 0 评论