假設我有一個表Emp
與emp_id
,emp_name
。我在表格中插入3個條目 - (1,A) (2,B) (3,C)
。SELECT語句每次都以相同的順序選擇數據嗎?
我沒有創建任何主鍵也沒有添加任何索引。
現在,當我運行select * statement
,將在數據中每次顯示爲(1,A),(2,B),(3,C)
或是否有對於輸出要(2,B), (1,A), (3,C)
或在其它變體的可能性。
假設我有一個表Emp
與emp_id
,emp_name
。我在表格中插入3個條目 - (1,A) (2,B) (3,C)
。SELECT語句每次都以相同的順序選擇數據嗎?
我沒有創建任何主鍵也沒有添加任何索引。
現在,當我運行select * statement
,將在數據中每次顯示爲(1,A),(2,B),(3,C)
或是否有對於輸出要(2,B), (1,A), (3,C)
或在其它變體的可能性。
數據可以通過密鑰,索引或甚至隨機地顯示在任何的順序。
「強制」和保證數據的唯一方法是每次都以相同的順序顯示,使用ORDER BY
子句並強制優化器按照您特別要求的順序選擇數據。
您需要添加「ORDER BY」子句以保證訂單。否則,這取決於數據庫引擎,配置和/或模式。
請閱讀以下stackoverflow post,以獲得更詳細的原因。
參見:http://stackoverflow.com/q/3574284/330315和http://stackoverflow.com/q/36077399/330315 –
實際上,在這種情況下 - 三行,按此順序插入,沒有CI,沒有NCI,沒有更新/刪除,沒有重建等 - 這些行將按此順序返回。但是,當然,任何模式或數據或引擎更改都可能會破壞它,因此需要ORDER BY。順便說一句,我不明白這個問題怎麼來了,被回答這麼多時間了? – dean