暂无图片
mysql主键等于一个随机数的 查询出来两条数据
我来答
分享
StartupForce
2020-11-18
mysql主键等于一个随机数的 查询出来两条数据

sysbench测试生成的表sbtest1,主键为id列,以下查询返回了两行数据,怎么回事,难道随机数返回多,成了in表达式?

mysql> select id,k,c,pad from sbtest1 where id=round(1+rand()*10000000); +---------+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+ | id | k | c | pad | +---------+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+ | 2898778 | 5028649 | 46962879307-12528096878-98533271975-28588894546-89347604371-19950165403-76306205107-40316135032-44372394143-89198007136 | 99652023711-77989728125-60857111039-43729275867-39065311690 | | 5880059 | 4325123 | 64531747760-63415903997-13051684140-84404429789-21701326784-38596788914-13518889645-16369987468-69025001759-63770817627 | 49533924409-06736919496-87250632017-19533775297-00877260384 | +---------+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+ 2 rows in set (9.12 sec) mysql> show create table sbtest1\G; *************************** 1. row *************************** Table: sbtest1 Create Table: CREATE TABLE `sbtest1` ( `id` int NOT NULL AUTO_INCREMENT, `k` int NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k_1` (`k`) ) ENGINE=InnoDB AUTO_INCREMENT=10000007 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec) ERROR: No query specified
复制
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
Cui Hulong

这个问题大致测试一下。确定跟rand函数有关系。
传进去的不是结构集,是rand函数。(需要源码debug执行过程,后续有结果共享)

暂无图片 评论
暂无图片 有用 0
打赏 0
StartupForce

有人说是不确定性函数的问题,会全表扫描,对于每刚行数据都执行rand函数,匹配就返回,所以返回多个。这样说能理解,但是感觉就是不符合语意,oracle就只返回一行

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
想把MySQL数据库下的所有表的结构和数据弄清楚, 用哪个命令好?
回答 4
用图形工具看
buffer pool大小是启动后,就立马分配出来的,还是后来随交易需要,慢慢长上来的?
回答 3
bufferpool是上限,启动的时候可能不会立马分配的
table_io_waits_summary_by_index_usage 包含innodb逻辑IO读 和 物理IO读吗?
回答 2
已采纳
包含,逻辑读的fetchlatencycount较高,物理读较低,因为一次查询可能只需要一次物理读操作。
MySQL audit日志有没有参数控制它自动删除?
回答 2
已采纳
只能手工备份后清理。
mysql中的show variables可以用select语句实现相同的效果么?
回答 2
相同,只是showvariables分全局和会话。以及select可以带where条件进行分组。不是说show不能用,只是不如select写的SQL方便。
安装 Mysql v8.0.26 。 它在正常使用期间运行良好,但我将运行退出命令并关闭 cmd 提示符。 然后关闭我的机器,当我重新打开它并尝试重新连接到服务器时,报错。
回答 2
mysql是咋启动的?看这现象是没有后台启动,导致cmd关掉后,进程掉了
pg和mysql之中该如何选择?
回答 7
已采纳
https://blog.csdn.net/youzhouliu/article/details/124994728这里面有详细介绍
MySQL数据表损坏的修复方式有哪些?
回答 1
已采纳
一、可以使用myisamchk来修复,具体步骤如下:  1.修复前将mysqld服务停止;  2.打开命令行方式,然后进入到mysql的/bin目录;&nbsp
MySQL 存数据的时候要选择不同的存储引擎吗?
回答 1
默认的存储引擎是innodb,不用选择。
大家有MySQL8.0小版本升级的步骤嘛??
回答 2
已采纳
您好:MySQL8.0.16开始升级有明显变化,需要注意避坑。升级前务必做好备份及测试环境中的充分测试。在MySQL8.0.16之前1.关闭MySQL,替换新的二进制MySQL2.启动MySQL,让服