更改mysql的默认排序行为

时间:2014-04-02 15:53:51

标签: mysql sql database sorting

我的数据库中有一张表。

+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| rollno | int(11)     | NO   |     | NULL    |                |
| name   | varchar(20) | NO   |     | NULL    |                |
| marks  | int(11)     | NO   |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

默认情况下,如果我查询

select * from students;

显示按id INT (auto-increment)排序的结果。

+----+--------+------------+-------+
| id | rollno | name       | marks |
+----+--------+------------+-------+
|  1 |     65 | John Doe   |    89 |
|  2 |     62 | John Skeet |    76 |
|  3 |     33 | Mike Ross  |    78 |
+----+--------+------------+-------+
3 rows in set (0.00 sec)

我想更改默认排序行为并将rollno设为默认排序字段,我该怎么做?

3 个答案:

答案 0 :(得分:1)

没有默认的排序顺序!

DB以尽可能最快的方式返回数据。如果这恰好是存储它的顺序或定义了一个键,那么这取决于系统。你不能依赖它。

考虑一下:如果您不需要订购,为什么DB会默认使用性能来订购。数据库针对速度进行了优化。

如果您想要它被订购,那么您必须在order by子句中指定它。

答案 1 :(得分:0)

select * from students order by rollno asc;将返回按该列排序的结果。应该注意的是,只要数据实际存储在数据库中(除了身份和索引之外),就没有默认的排序行为;你不应该依赖于你的结果以某种方式排序,除非你明确地对它们进行排序(使用order by)。

答案 2 :(得分:0)

运行此

ALTER TABLE students ORDER BY rollno ASC;