工作中MySql的小技巧

1. 跑脚本时,经常遇到有则更新无插入的 逻辑操作;通常情况下,来一波if()判断然后选择 更新还是插入,前两天逛论坛时发现有人在比较REPLACE INTO 和 INSET INTO *** ON DUPLICATE KEY UPDATE ** 的 效率,觉得这是一个是优化以前做法的知识,有点意思。
  • REPLACE INTO 与 INSET INTO *** ON DUPLICATE KEY UPDATE ** 的使用与比较

先创建一个实验表

CREATE TABLE gmm_test (id INT AUTO_INCREMENT PRIMARY KEY,`unqi` INT,field1 INT,field2 VARCHAR(12),UNIQUE KEY (unqi)
) ;

这张表里面,id自增,unqi是唯一索引。
同时我们添加一条记录:

INSERT INTO `gmm_test` (`unqi`,`field1`,`field2`) VALUES (2,2,'ddd');

表里面是这样的:

id    unqi  field1  field2  1       2       2  ddd  

当我们想以unqi为条件来一波--有更无增(指符合条件的记录执行更新,不符合的则插入新纪录,下同) 操作时;

如下即可:

REPLACE INTO `gmm_test` (`unqi`,`field2`) VALUES (2, 'qqqq')

执行后,有如下结果:
1 queries executed, 1 success, 0 errors, 0 warnings

查询:replace into `gmm_test` (`unqi`,`field2`) values (2, 'qqq')共 2 行受到影响执行耗时   : 0.003 sec
传送时间   : 0.003 sec
总耗时  : 0.006 sec

这时你应该注意到,共2行受到影响

看下表的结果,

id    unqi  field1  field2  2       2  (NULL)  qqqq    

连主键id都自增了一次,所以在使用时要注意了,毕竟id变了可不是小事~~

再来看看 INSET INTO * ON DUPLICATE KEY UPDATE , 这个也可以来 ---有更无增;

INSERT INTO `gmm_test` (`unqi`, `field1`, `field2`) VALUES (2, 0, 'qqqq') ON DUPLICATE KEY UPDATE field1 = field1 + 10;

或者
INSERT INTO gmm_test (unqi, field1, field2) VALUES (2, 10, 'qqqq') ON DUPLICATE KEY UPDATE field1 = values(field1);

结果如下:

查询:INSERT INTO `gmm_test` (`unqi`, `field1`, `field2`) VALUES (2, 0, 'qqqq') ON DUPLICATE KEY UPDATE field1 = field1 + 10共 2 行受到影响执行耗时   : 0.002 sec
传送时间   : 0.001 sec
总耗时  : 0.003 sec

虽然也是两行,但是主键id并没有变,

id    unqi  field1  field2  2       2      10  qqqq   

关于效率问题,木有测,就借网上别人测好了的吧 .这里

总结下来,就是尽量还是不用replace into 吧,毕竟好多坑

2. 我在统计我爬虫抓取到的一些内容的时候,又一次需要一个 堆叠的条形图,相当于将一个字段的值按区间来分组。

比如我要统计 在线时间 分别 在 0~50h,50~100h,100~200h,200~500h ,200h以上 内的人数分别有多少?

SELECT ELT(INTERVAL(h.online_time,0, 50,100, 200), '0','50','100', '200') AS on_time, COUNT(h.online_time) AS cntFROM hupu_user hGROUP BY ELT(INTERVAL(h.online_time, 0, 50,100, 200), '0','50','100', '200');

解释:

INTERVAL(N,N1,N2,N3,..........)

INTERVAL()函数进行比较列表(N1,N2,N3等等)中的N值。该函数如果N<N1返回0,如果N<N2返回1,如果N<N3返回2 等等。如果N为NULL,它将返回-1。列表值必须是N1<N2<N3的形式才能正常工作。

eg:
假设有一个下载速度表(有 speed 和 count 两个字段),
然后统计1M,2M,4M,8M,8M以上这个5个速度区间的个数

select INTERVAL(speed,1000,2000,4000,8000) as i_s, sum(count)  from a_speed_table  group by i_s  

上面的 sql 根据速度区间分组,再对不同区间出现的次数求和

ELT(N,str1,str2,str3,...)

如果N =1返回str1,如果N= 2返回str2,等等。返回NULL如果参数的数量小于1或大于N。ELT()是FIELD()的补集。 这个比较好理解了

3. order by 排序重复的问题。

当order by 后面值相同时,系统对数据的排序可能变得随机化,即一会儿这条数据在前面,一会儿这条数据在后面了 ,所以我们看到了重复数据,所以在分页的时候使用oerder by的时候最后在目标排序字段的基础上再加上一个字段,组成一个不会相同的排序依据

···这些也不算难,权当些无聊时的获取些笔记乐趣吧,然后想吐槽下博客园对markdown格式支持还是有些不一样额,和预期的排版差一些~~||0,0||···

作者:fredGui

*来源:http://www.cnblogs.com/guixiaoming/p/8672343.html

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/guixiaoming/p/8672343.html

工作中MySql的了解到的小技巧相关推荐

  1. mysql命令行的一些小技巧

    mysql命令行的一些小技巧 1.以html格式输出结果 使用mysql客户端的参数–html或者-T,则所有SQL的查询结果会自动生成为html的table代码 $ mysql -uroot --h ...

  2. 11个教程中不常被提及的JavaScript小技巧

    Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:冷星 来源:https://segmentfault.com/a/1190000018897633 这次我们主要来分享1 ...

  3. Python中四个不常见的小技巧

    1. 引言 在编程界,每个人都希望自己可以写出世界上最好的代码,其实最好的代码往往需要具备最好的代码质量.勤能补拙,善于总结往往可以快速提升大家的编程技巧. 本文重点对日常中不常使用的四个Python ...

  4. Excel表格中一些你不知道的鼠标双击实用小技巧

    Excel表格中一些你不知道的鼠标双击实用小技巧 目录 Excel表格中一些你不知道的鼠标双击实用小技巧 1.鼠标双击自动填充整列公式, 鼠标放在单元格右下角,鼠标指针变成十字时双击鼠标右键,整列汇总 ...

  5. Win10 UWP开发中的重复性静态UI绘制小技巧 1

    Win10 UWP开发中的重复性静态UI绘制小技巧 1 原文:Win10 UWP开发中的重复性静态UI绘制小技巧 1 介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态 ...

  6. excel删除空行_办公中常用的6个Excel小技巧,不会你就OUT了!

    原标题:办公中常用的6个Excel小技巧,不会你就OUT了! 今天小编给大家分享几个EXCEL办公中比较常用的小技巧,赶紧跟我一起来学习下吧! 01 将所有数据上调 在某些情况下,我们希望将表格中所有 ...

  7. 深度linux运行windows游戏,在deepin linux系统中手动安装windows游戏的小技巧

    本文介绍在deepin linux系统中手动安装windows游戏的小技巧.其实现在wine很好用了,基本dx9的游戏都能玩,但是有些RA2则效果一般,不是很好.关于deepin-wine的版本低有些 ...

  8. 我在工作中总结的一些前端常用小细节 (转载)

    1.点击聚焦 onfocus="if (value =='请输入您的电话号码'){value =''}" onblur="if (value ==''){value='请 ...

  9. 从git仓库中删除.idea文件夹的小技巧

    这篇文章主要介绍了从git仓库中删除.idea文件夹的小妙招,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 如果不配置.gitignore的文件,带push ...

最新文章

  1. Android SERVICE后台服务进程的自启动和保持
  2. Android:四种启动模式分析
  3. Unix整理笔记-vi简介-里程碑M8
  4. 【算法随记一】Canny边缘检测算法实现和优化分析。
  5. DbVisualizer 8 解决中文乱码问题
  6. 计算机的iscsi配置,我们将了解如何设置自己的支持iscsi配置的存储节点
  7. java 虚拟打印机_打印作业提交给打印机,使用虚拟打印机但不是真正的打印机 . Java的...
  8. 计算机网络实用技术教学资源,计算机网络实用技术第一章课件教学.ppt
  9. 13.1.DataGrid的增、删、改、查前台页面
  10. python和c语言的区别-python和c语言的区别是什么
  11. linux dd tar 整盘备份,tar(压缩,打包,备份),dd(备份,建档),cpio
  12. 女朋友问阿里双十一实时大屏如何实现,我惊呆一会,马上手把手教她背后的大数据技术
  13. 知名互联网公司架构图
  14. 刑事案件的构成要素 zt
  15. [江枫]In Memory Undo与logical standby database
  16. 使用openssl转换pem为pfx证书
  17. html table拓宽,excel拉长单元格_excel调整单元格大小的方法步骤详解
  18. U盘、移动硬盘错误0x80071ac3!
  19. 独立同分布的中心极限定理
  20. 一文彻底搞懂ROC曲线与AUC的概念

热门文章

  1. go语言搭建代理服务器_Go实现Https代理服务
  2. SAP WM高阶Storage Location Control
  3. 联邦学习 OR 迁移学习?No,我们需要联邦迁移学习
  4. 演讲实录丨王海峰:AI 新基建加速产业智能化
  5. AAAI 2020 | 通过解纠缠模型探测语义和语法的大脑表征机制
  6. 2019年上半年收集到的AI计算机视觉方向干货文章
  7. 项目管理5大过程组与10大知识领域
  8. NLP深度学习:近期趋势概述
  9. 破解人工智能系统的四种攻击方法!
  10. 突破性进展!上海光机所成果登上《Nature》封面!