【技术分享】避免MySQL数据库表默认排序造成乱序

299 查看

废话不多说,正如题目所言,今天我在写后台的时候发现了一个奇怪的现象,于是百度了一下,发现的确需要注意这些细节。

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

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

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

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

在开发之中难免遇到像这样排序的问题,我在这里总结一下,如果是多条数据查询输出,养成习惯ORDER BY查询顺序习惯(特别是分页),如果是单个数据大可不必多几句代码占用内存。祝大家进步,新的一年健健康康(不是那个丑康康),快快乐乐!