Mysql里面默認排序是升序。ORDER BY 子句若未顯式指定升序(ASC)或降序(DESC),那么就認按默認升序排序。
成都創(chuàng)新互聯(lián)成立于2013年,先為阿合奇等服務(wù)建站,阿合奇等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為阿合奇企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
參考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引擎表在沒有任何的刪除,修改操作下,執(zhí)行 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,會根據(jù)主鍵來排序,從小到大
當你的表示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 數(shù)據(jù)庫中的關(guān)鍵字,作為字段是不行的,如果把它改成非關(guān)鍵字如 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相同,就會根據(jù)*號中第二列的默認排序,比如數(shù)值型的話就是從0、1、2、3這樣,字符型可能就是首字母的順序。
如果結(jié)果都一樣就按照系統(tǒng)默認的排序排。
如果是 innodb引擎,會根據(jù)主鍵大大小,由小到大;
如果是myisam引擎,就根據(jù)數(shù)據(jù)插入順序先后來排。
例如你表名 為test,sql 如下:
? ?select * from test order by `order` desc-----------------根據(jù)order降序排列,去掉末尾的desc就是升序。
注:order為關(guān)鍵字,所以字段order需要用反引號括起來,
根數(shù)據(jù)庫系統(tǒng)的算法有關(guān),早期版本的算法是自然的多個線程二分法,那個線程先查到滿足條件的數(shù)據(jù)就先輸出出來,這樣就是亂序的,后期經(jīng)過改進按照主鍵自然排序輸出。
如果order by的值相同,一般是按自然排序,就是首個字符的字母或漢字的發(fā)音的首字母的排序。