首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql 排序规约

2012-08-29 
mysql 排序规则sid 是主键order_no是唯一索引谁能帮我解释一下3次查询结果 为什么不一样, 在3个sql 的排序

mysql 排序规则
sid 是主键 order_no 是唯一索引

谁能帮我解释一下3次查询结果 为什么不一样, 在3个sql 的排序规则都是什么

SQL code
mysql> select sid,order_no,order_status from oms_order   limit 10;+-----+----------------+--------------+| sid | order_no       | order_status |+-----+----------------+--------------+|  20 | 20100319000003 |            0 ||  21 | 20100319000004 |            0 ||  63 | 20100319000046 |           -1 ||  69 | 20100320000006 |            0 ||  76 | 20100323000001 |            0 ||  77 | 20100323000002 |            0 ||  78 | 20100323000003 |            0 ||  79 | 20100323000004 |            8 ||  86 | 20100324000007 |           -1 ||  93 | 20100324000014 |           -1 |+-----+----------------+--------------+10 rows in set (0.00 sec)mysql> select sid,order_status from oms_order   limit 10;+-----+--------------+| sid | order_status |+-----+--------------+| 240 |           -1 || 261 |           -1 || 263 |           -1 || 285 |           -1 || 286 |           -1 || 288 |           -1 || 339 |           -1 || 383 |           -1 || 387 |           -1 || 452 |           -1 |+-----+--------------+10 rows in set (0.00 sec)mysql> select sid from oms_order   limit 10;+---------+| sid     |+---------+| 1171641 || 1171651 || 1171661 || 1171671 || 1171681 || 1171691 || 1171701 ||      20 ||      21 ||      63 |+---------+10 rows in set (0.00 sec)


[解决办法]
没有加 order by 的话,查出来的就是物理顺序,如果没有做过删除操作,那么应该是这样的:

select sid,order_no,order_status from oms_order limit 10;
这个肯定优先使用 sid 排序,再使用 order_no 排序

select sid,order_status from oms_order limit 10;
sid 排序

select sid from oms_order limit 10;
这个只有 sid,只好使用它排序了,看上去 sid 是字符型的数据,所以 1171701 在 20 前。

[解决办法]
没有ORDER则由MYSQL自行处理顺序,而这个顺序则和记录的物理顺序,索引的顺序相关。

热点排行