这个问题与我的old question, Getting last record from mysql有点相关。
根据这些答案,我了解到 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 :(得分:1)
取决于引擎类型以了解后台发生的事情:
'对于MyISAM和BDB表,您可以在多列索引中的辅助列上指定AUTO_INCREMENT。在这种情况下,AUTO_INCREMENT列的生成值计算为MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。当您想要将数据放入有序组时,这非常有用。'
这将创建在auto_increment上具有多个值的表,非唯一值。
所以你真正想要的是为InnoDB表设置一个带有auto_increment的PRIMARY KEY(虽然不是必需的)。在没有order by子句的情况下选择时,简单选择将返回主键顺序中的值,因为它按此顺序存储,并将使用主键进行排序。
如果您希望特定订单始终指定它,请根据需要使用PRIMARY KEY,但始终指定它。