找回密码
 注册
首页 ≡≡网络技术≡≡ 数据库 mysql默认排序规则

mysql默认排序规则

灰儿 2018-7-6 14:58:21
select * from... 查询一张表的数据,如果sql语句中不排序,不包含order by子句,那么默认是怎么排序? 好像一般情况下是按主键id排序,但是今天发现了一个奇怪的现象,默认排序不完全是按ID号从小到大排序。

MySQL会怎么排序呢?
* 不能依赖 MySQL 的默认排序
* 如果你想排序,总是加上 Order By
* GROUP BY 强加了 Order By (这与标准语法冲突,如果要避免,请使用 ORDER BY NULL)这里我有疑问,


对于 MyISAM 表
MySQL Select 默认排序是按照物理存储顺序显示的。(不进行额外排序).

大致意思为,一个myisam引擎表在没有任何的删除,修改操作下,执行 select 不带order by,那么会按照插入顺序进行排序。


灰儿 楼主 2018-7-6 15:09:47
废话不多说,正如题目所言,今天我在写后台的时候发现了一个奇怪的现象,于是百度了一下,发现的确需要注意这些细节。

是什么现象呢?就是MySQL数据库在用户删除数据库数据以后排序乱了,不是按照ID的自增进行排序,而是很随意的排序。带着这个疑问,抱着解决问题的态度先解决了这个BUG,然后再找原理。

解决方法很简单,在MySQL的SELECT语句中加个“ORDER BY id ASC”,这是递增排序的语法,倒序则是DESC。

那么问题到底出在什么地方?
首先我们要知道MySQL的SELECT语句默认排序是怎样排序的。MySQL SELECT 默认排序是按照物理存储顺序显示。(不进行额外排序)也就是说SELECT    *   FROM  会产生“表扫描”。如果表没有增,删,改操作,记录会显示为插入的顺序。这就是初始为什么像是递增的原因。

那么,当我们进行增,删,改以后不难发现会乱序,这便是问题所在。增删改是惯用功能,因此必须注意这个细节。当我们不进行ORDER BY来规定排序时,MySQL将会以最快的形式(物理存储顺序)展示数据,导致乱序。

在开发之中难免遇到像这样排序的问题,我在这里总结一下,如果是多条数据查询输出,养成习惯ORDER BY查询顺序习惯(特别是分页),如果是单个数据大可不必多几句代码占用内存。
您需要登录后才可以回帖 登录 | 注册
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。