网上关于floor报错的文章很多,但都是利用语句,介绍原理的文章大多一笔带过,不过我终于找到一篇像样的原理文章,于是参考着来理解原理,参考的这个链接说的很详细了,但我仍然还有些不明白的地方,所以就研究了一下,终于大体弄懂了,虽然还有些疑问,但还是要泪流满面滴记录下来自己的理解。。。写作渣渣尽量记的有条理,,(说来惭愧,接触安全一年了,现在才弄明白。。)

利用语句网上一搜一大堆,我就不再细说了,先根据一个语句上个总结图片吧:

先把rand函数说一下,下面会用到。

语句中的floor(rand(0)*2)是什么意思?是为了产生一个不唯一的且能会出现重复的数字。rand()函数产生的数会随机产生0到1的小数,而加上参数变成rand(0)的时候,会产生一个确定的小数(我的理解)可能有些绕, 所以我们看一下执行语句:

rand()函数执行2次结果,:

加了参数执行2次的结果:

所以,rand(0)是为了得到一个确定的数,也就是执行第几次就是什么数据(我自己的理解),而*2再floor是为了得到唯一的整数数据,不然小数太长了,想找到个重复的数就太难了。。除此之外你乘大于等于2的什么数都行,当然也不能太大,比如9999999999999。要大于等于2是因为,小于2,floor(rand(0)*2)会变成0,不会不唯一,数太大,,没有那么多数据能让你查到重复。。。

再说报错,报了什么错呢,是主键重复,为什么会主键重复呢?这就group by 和 count(*)有关了,我们先看count(*)和group by组合一起的效果

结果会显示每个列的次数,而这个列的内容,是唯一的主键。而在查询过程中,是先建立一张虚拟表,一行一行插入的,而插入时已经有重复主键了,那么,就会报错。当然,可能会问了,重复时,count(*)就加1了,为什么会主键重复呢?这就和rand()函数有关了,官方文档中提到,rand()函数在进行GROUP BY查询时会被计算多次,这里列举参考文档的解释,我觉得说的很清楚:

1.查询前默认会建立空虚拟表

2.取第一条记录,执行floor(rand(0)*2),发现结果为0(第一次计算),查询虚拟表,发现0的键值不存在,则floor(rand(0)*2)会被再计算一次,结果为1(第二次计算),插入虚表,这时第一条记录查询完毕

3.查询第二条记录,再次计算floor(rand(0)*2),发现结果为1(第三次计算),查询虚表,发现1的键值存在,所以floor(rand(0)*2)不会被计算第二次,直接count(*)加1,第二条记录查询完毕

4.查询第三条记录,再次计算floor(rand(0)*2),发现结果为0(第4次计算),查询虚表,发现键值没有0,则数据库尝试插入一条新的数据,在插入数据时floor(rand(0)*2)被再次计算,作为虚表的主键,其值为1(第5次计算),然而1这个主键已经存在于虚拟表中,而新计算的值也为1(主键键值必须唯一),所以插入的时候就直接报错了。

5.整个查询过程floor(rand(0)*2)被计算了5次,查询原数据表3次,所以这就是为什么数据表中需要3条数据,使用该语句才会报错的原因。

这里补充一下5,为什么需要3条数据,看一下floor(rand(0)*2)的执行结果

虽然只有2个值,但是你要查到第三条才会有重复啊~~~~~

好了,最后可以总结一下,SELECT distinct concat(0x23,PersonID,0x3a,Password,0x23) FROM person limit 0,1就是查想要的数据,floor(rand(0) * 2)是为了生成一个不唯一的且可重复的数,好让后面能主键重复

concat((SELECT distinct concat(0x23,PersonID,0x3a,Password,0x23) FROM person limit 0,1 ),rand(0) * 2 ),是为了聚合成#1:c4d7b26adbecfc3fedbc895f30099f4b#1的样子,SELECTcount(*), concat( (SELECT distinct concat(0x23,PersonID,0x3a,Password,0x23) FROM person limit 0,1),floor(rand(0) * 2)) xFROMinformation_schema. TABLES GROUP BY  x 是为了把rand count(*),group by凑在一起,因为凑在一起才会计算多次,有主键重复。最外面那层select 1 可以不要。。

好了,差不多就是这样,写到这里,真是对写出这个利用语句的人佩服,MySQL一定玩的很溜。这篇博客是加了自己理解的东西,如果哪里说错,或者有不一样看法的,大家多交流~~~还有,渣渣求指点。。

mysql floor报错_【学习笔记】MYSQL的floor报错原理分析总结相关推荐

  1. mysql左连接含义_学习笔记-数据库左连接,右连接意义及区别

    1.左连接,右连接等的意义及区别: 1)笛卡尔积:CROSS JOIN 要理解各种JOIN首先要理解笛卡尔积.笛卡尔积就是将A表的每一条记录与B表的每一条记录强行拼在一起. 所以,如果A表有n条记录, ...

  2. java对mysql读写权限设置_Java学习笔记——MySQL开放3306接口与设置用户权限

    系统Ubuntu16.04 LTS 1.开放3306端口 查看端口状态: netstat -an|grep 3306 tcp        0      0 127.0.0.1:3306        ...

  3. 《MySQL实战45讲》——学习笔记01-03 “MySQL基本架构、日志系统、事务隔离“

    最近有新闻说"丁奇"炒股失败欠债,赶紧去极客时间买了他的<MySQL 实战 45 讲>以防下架,顺带重新系统的复习下MYSQL相关知识,记录下学习笔记: 本篇介绍: M ...

  4. 《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“

    04 | 深入浅出索引(上) 1. 什么是索引? 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样,书有500页,每页存的都是书的内容,目录可能只有5页,只存了页码:通过目录能快速找到某个主 ...

  5. 《MySQL实战45讲》——学习笔记12 “InnoDB刷脏页的控制策略“

    本篇介绍MYSQL InnoDB的WAL机制带来的小问题--利用WAL技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,但也带来了内存脏页的问题: 脏页会被后台线程自动flush,也会由于数 ...

  6. 韩顺平php可爱屋源码_韩顺平_php从入门到精通_视频教程_第20讲_仿sohu主页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理...

    韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理 对sohu页面的分析 注释很重要 经验:写一点,测试一点,这是一个很好的方法. ...

  7. DHCP服务_学习笔记

    DHCP服务_学习笔记 DHCP(Dynamic Host Configuration Protocol):动态主机配置协议 Lease:租约    续租时间需要是租期时间的一半 UDP协议: Ser ...

  8. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

  9. 友盟统计+渠道包_学习笔记

    友盟统计+渠道包_学习笔记 资料: 官网:https://developer.umeng.com/docs/66632/detail/66889#h3-u5E38u89C1u95EEu9898 视频资 ...

  10. 图论01.最短路专题_学习笔记+模板

    图论01.最短路专题_学习笔记+模板 一.定义与性质 ● 需要的前导知识点 路径 最短路 有向图中的最短路.无向图中的最短路 单源最短路.每对结点之间的最短路 ● 最短路的性质 对于边权为正的图,任意 ...

最新文章

  1. JZOJ 5344. 【NOIP2017模拟9.3A组】摘果子
  2. PhantomJS 一个隐形的浏览器
  3. 使用.NET读取XML文件
  4. python autohotkey_PyAutoGUI-python版的autoit/AHK
  5. 前端单页面拆分多个单页面
  6. php过滤微信特殊字符方案--》2017新版
  7. 自己写的Point类
  8. ac3168无线网卡驱动下载_计算机基础:网卡
  9. 全国计算机OFFICE二级考试大纲,全国计算机等级考试二级MSOffice高级应用考试大纲...
  10. 南方cass快捷键命令修改在哪_南方CASS操作快捷命令
  11. 基于simhash的短文本去重
  12. 商业融资项目计划PPT模板
  13. idea git 颜色代表什么意思
  14. jq chosen下拉列表被遮挡
  15. 内网穿透,外网装逼:10分钟学会用花生壳实现从外网访问内网的web项目
  16. 苹果手机热点连上不能上网_「手机自学维修教程」苹果6plus手机屏幕触摸不能用的通病分析...
  17. 淘宝低价引流违法吗,低价引流的处罚
  18. 论文笔记|固定效应的解释和使用
  19. 麦克风离计算机主机多远,唱歌的时候,嘴离麦克风多远最好听?
  20. vue延迟渲染组件_性能优化之组件懒加载: Vue Lazy Component 介绍

热门文章

  1. 【C语言】数据结构C语言版 实验4 栈与字符串
  2. apple开发过程中错误汇总ios+macos
  3. 如何使用Docker Volumes在基于Docker的应用程序上启用实时重新加载
  4. python生成器的使用_应该如何以及为什么使用Python生成器
  5. 我的第一个安卓应用程序_今天,我启动了我的第一个移动应用程序。 这是我学到的...
  6. java this的用法
  7. 19楼网站服务器配置,简单的DNS 服务器配置
  8. mysql自动获取时间列_mysql自动获取时间日期的方法
  9. 拿去用,常见几种加密算法的Python实现
  10. Python高级——迭代器与生成器