在我的情况下,AUTO_INCREMENT是否正确实施?

时间:2012-11-06 09:22:32

标签: mysql last-insert-id

这个问题与我的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将是正确的实施吗

1 个答案:

答案 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,但始终指定它。