关于mysql一个很神奇的问题

fsleo 2019-02-22 01:21:05
之前我用MariaDB 10.3.9,后来由于某些原因。换成了mysql 5.7.25,我发现一个很奇怪的问题。先发表结构:
CREATE TABLE `points` (s
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`activity_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '项目',
`customer_id` int(10) NOT NULL DEFAULT 0 COMMENT '用户',
`point` int(10) NOT NULL DEFAULT 0 COMMENT '积分值',
`ranking` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '当前排行',
`create_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '最后更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uni_activity_user` (`activity_id`,`customer_id`) USING BTREE,
KEY `idx_activity` (`activity_id`,`point`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='积分';


我现在的需求是,每30分钟我会执行下面的sql,主要目的是排序出来数字写到 ranking,看代码:
UPDATE points AS p,
(SELECT @a:=@a+1 AS ranks, a.id as ids FROM points AS a,(SELECT @a:=0) r
WHERE a.activity_id = 7241 AND a.point > 0 ORDER BY a.point DESC, a.id ASC) AS b
SET p.ranking = ranks WHERE p.id = b.ids;


更新完后,我会用下面的命令查看
SELECT * FROM points WHERE activity_id = 7241 AND point > 0
ORDER BY point DESC,id;


神奇的事情来了!
MariaDB 是这样排的:


而mysql 确是这样排的

为什么呢?在mysql 下我要如何修改这条命令,才能跟mariadb 一样呢?
...全文
515 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
解决方案呢?
fsleo 2019-02-23
  • 打赏
  • 举报
回复
引用 2 楼 康师傅架构学习之路 的回复:
MySQL与MariaDB对嵌套的查询语句当中的order by的处理方法不同。MySQL会忠实执行内层查询的排序子句,但是MariaDB会将这个order by去掉,理论依据就是关系理论 --- 一个表是行的集合,因此没有顺序要求。由于嵌套的查询语句是外层查询的数据表,因此可以以任何顺序提供给外层查询。如果在内层查询语句中不仅有order by,还有limit子句,那么这时这个order by是不会被MariaDB忽略的,因为此时的行的顺序会决定哪些行会返回给外层查询。
感谢你的回复
fsleo 2019-02-23
  • 打赏
  • 举报
回复
感谢@成都-橙橙-IT 帮我解决了,再次感谢!
  • 打赏
  • 举报
回复
MySQL与MariaDB对嵌套的查询语句当中的order by的处理方法不同。MySQL会忠实执行内层查询的排序子句,但是MariaDB会将这个order by去掉,理论依据就是关系理论 --- 一个表是行的集合,因此没有顺序要求。由于嵌套的查询语句是外层查询的数据表,因此可以以任何顺序提供给外层查询。如果在内层查询语句中不仅有order by,还有limit子句,那么这时这个order by是不会被MariaDB忽略的,因为此时的行的顺序会决定哪些行会返回给外层查询。
fsleo 2019-02-23
  • 打赏
  • 举报
回复
没有大神知道吗?

56,803

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧