重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Mysql里面默认排序是升序。ORDER BY 子句若未显式指定升序(ASC)或降序(DESC),那么就认按默认升序排序。
成都创新互联成立于2013年,先为阿合奇等服务建站,阿合奇等地企业,进行企业商务咨询服务。为阿合奇企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
参考mysql官方的回答:
当你的表示myisam时:
SELECT * FROM tbl -- this will do a "table scan". If the table has never had any DELETEs/REPLACEs/UPDATEs, the records will happen to be in the insertion order, hence what you observed.
大致意思为,一个myisam引擎表在没有任何的删除,修改操作下,执行 select 不带order by,那么会按照插入顺序进行排序。
If you had done the same statement with an InnoDB table, they would have been delivered in PRIMARY KEY order, not INSERT order. Again, this is an artifact of the underlying implementation, not something to depend on.
对于innodb引擎表来说,在相同的情况下,select 不带order by,会根据主键来排序,从小到大
当你的表示myisam时:
SELECT * FROM tbl -- this will do a "table scan". If the table has never had any DELETEs/REPLACEs/UPDATEs, the records will happen to be in the insertion order, hence what you observed.
如果in 是你的表中的一个字段(列名)通常是不可以的,因为 in 是个mysql 数据库中的关键字,作为字段是不行的,如果把它改成非关键字如 ins 那安装ins进行排序查询基本如下
select * from tablename order by ins desc;按降序查询
select * from tablename order by ins asc;按升序查询(asc通常可以省略)
mysql的orderby可以排序多个。
多个排序语法:
升序:select * from table_name order by 字段1,字段2;
降序:select * from table_name order by 字段1 desc,字段2 desc;
下面通个一个例子介绍:有表student,表记录有,当只做age的排序的时候,年龄从大到小的排列
当做age和id排序的时候,先是年龄排序,而同年龄时段的再按id大小排 。
mysql的order by可以排序多个,只需在order by 后面的字段用逗号隔开即可,多个排序是有效的。
select * from table order by fileds limit 0,1000;
如果fileds相同,就会根据*号中第二列的默认排序,比如数值型的话就是从0、1、2、3这样,字符型可能就是首字母的顺序。
如果结果都一样就按照系统默认的排序排。
如果是 innodb引擎,会根据主键大大小,由小到大;
如果是myisam引擎,就根据数据插入顺序先后来排。
例如你表名 为test,sql 如下:
select * from test order by `order` desc-----------------根据order降序排列,去掉末尾的desc就是升序。
注:order为关键字,所以字段order需要用反引号括起来,
根数据库系统的算法有关,早期版本的算法是自然的多个线程二分法,那个线程先查到满足条件的数据就先输出出来,这样就是乱序的,后期经过改进按照主键自然排序输出。
如果order by的值相同,一般是按自然排序,就是首个字符的字母或汉字的发音的首字母的排序。