2012-11-06 63 views
3

此問題與我的old question, Getting last record from mysql有點相關。AUTO_INCREMENT在我的情況下是否正確實施?

根據這些答案,我瞭解到SELECT不保證以任何特定順序返回行(當然,不使用ORDER BY子句)。

我跟着@YaK答案,並添加AUTO_INCREMENT在表中使用下面的命令。

ALTER TABLE maxID ADD sequence INT DEFAULT NULL; 
ALTER TABLE maxID ADD INDEX(sequence); 
ALTER TABLE maxID MODIFY sequence INT AUTO_INCREMENT; 

但今天我得到了一個問題。

SELECT不能保證在任何特定的順序返回行(不使用ORDER BY條款,當然),然後在改變表,AUTO_INCREMENT將正確實施?

+0

您是否嘗試過運行一些測試? – GregD

+0

@GregD:不,我在閱讀舊的答案時得到了這個問題。另外做測試會很困難,因爲我必須手動檢查每一行,並且有成千行... –

+0

取決於你如何進行這樣的測試。我認爲(1)使用AUTO INCREMENT創建表,(2)填充樣本數據,(3)刪除PRIMARY KEY,(4)使用AUTO INCREMENT值創建新列,然後(5)簡單'SELECT col FROM t WHERE col1! = col2'應該做的伎倆。我想,InnoDB和MyISAM引擎之間可能存在一些差異。 – GregD

回答

1

取決於發動機型號什麼是在後臺發生的事情:

「對於MyISAM,你可以在多列索引中的次級柱指定AUTO_INCREMENT BDB表。在這種情況下,AUTO_INCREMENT列的生成值計算爲MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。當你想把數據放入有序組時,這很有用。'

這將在auto_increment非唯一值上創建具有多個值的表。

所以,你真正的意思是爲InnoDB表使用auto_increment(雖然不是必須的)有一個PRIMARY KEY。當選擇不帶order by子句時,一個簡單的select將按照主鍵順序返回值,因爲它按此順序存儲並將使用主鍵進行排序。

如果你想要一個特定的訂單總是指定它,如果你想使用PRIMARY KEY,但總是指定它。

相關問題