none
主键与唯一约束同时存在的排序问题 RRS feed

  • 问题

  • SQL 2008 R2

    如图:

    这是一张结构简单的表,flag列是主键列,数据类型tinyint,flagname列定义了唯一约束(unique),数据类型varchar(20)。

    现在的问题是未按flag进行排序。尝试过:

    1、将主键约束删除,就会按flag排序

    2、将唯一约束删除,亦会

    3、将flag数据类型改为varchar,亦会

    请问,如何在保证有主键、有唯一、主键为tinyint的情况下以主键列排序

    2012年1月6日 3:22

答案

  • Always use 'order by' clause, it's the only guaranteed way to sort data. 

    • 已标记为答案 ahdung_AI 2012年1月11日 4:00
    2012年1月6日 3:44
  • 表一定是按照聚集索引排序,但是不加order by出来的结果不保证排序。select * from table的结果不一定是排序的。
    想不想时已是想,不如不想都不想。
    • 已标记为答案 ahdung_AI 2012年1月11日 3:59
    2012年1月6日 9:43
    版主
  • 經過測試是你的flagname的unique條件約束所造成的,試試看把unique拿掉之後就可以依照flag欄位自動排序。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    • 已标记为答案 ahdung_AI 2012年1月11日 4:00
    2012年1月9日 6:52
  • 出差几天没跟贴,很感谢大家的帮助。

    那么又要PK又要UNIQUE、并且PK必须是数值类型时,就真的不能以PK自然排序吗?是什么原因导致UNIQUE抢夺了PK的排序权利呢?

    Sql orders data by clustered index physically on the disk but not for query result, always use order by in the query.
    • 已标记为答案 ahdung_AI 2012年1月11日 3:58
    2012年1月9日 14:21
  • 請參考以下的url,

    http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order

    There is no default sort order. Even if the table has a clustered index, you are not guaranteed to get the results in that order. You must use an order by clause if you want a specific order.


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    • 已标记为答案 ahdung_AI 2012年1月11日 3:58
    2012年1月10日 2:35

全部回复