MySQL:AUTO_INCREMENT可以无序生成值吗?

时间:2011-12-25 14:53:27

标签: mysql auto-increment

假设我有桌子:

CREATE TABLE test (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    InsertTime DATETIME
) ENGINE = InnoDB;

并且,通过Apache / PHP网站,作为对Web请求的响应,我一直这样做:

INSERT INTO test (InsertTime) values (NOW());

假设row1.ID > row2.ID然后row1.InsertTime >= row2.InsertTime是否安全?或者通过一些不幸的因素组合(复制环境中的多CPU服务器与正确对齐的木星卫星等),这可能会失败?

注意:我没有任何问题。我正在编写一个新的软件,我想知道我是否可以依靠按ID排序以按日期排序(只有NOW()甚至会插入到该列中。)

5 个答案:

答案 0 :(得分:2)

我认为由于DST,你每年会有一些不一致(当然,这取决于服务器设置)。除此之外,我不明白它为什么会失败。

答案 1 :(得分:2)

我认为大多数问题都来自对NOW()的调用而不是AUTO_INCREMENT。我怀疑大多数计算机在某些时候打印NOW()日期不按顺序!这通常是因为系统管理员改变了时钟,或者是因为NTP改变了时钟。

答案 2 :(得分:1)

最好,我可以告诉,自动增量ID永远不会以错误的顺序返回记录。但是,在按ID排序时,还需要注意另一个案例。

如果您的客户端始终保留要插入的记录,那么在读取记录时,将不会按照创建的相同顺序读取它们。我已经多次遇到这种情况,例如,为具有间歇性网络访问权限的移动应用程序构建客户端时。

答案 3 :(得分:0)

如果有人手动重置表格上的auto_increment,则可能。

答案 4 :(得分:0)

是,删除auto_increment列,然后重新创建一个新列。