假设我有桌子:
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()
甚至会插入到该列中。)
答案 0 :(得分:2)
我认为由于DST,你每年会有一些不一致(当然,这取决于服务器设置)。除此之外,我不明白它为什么会失败。
答案 1 :(得分:2)
我认为大多数问题都来自对NOW()的调用而不是AUTO_INCREMENT。我怀疑大多数计算机在某些时候打印NOW()日期不按顺序!这通常是因为系统管理员改变了时钟,或者是因为NTP改变了时钟。
答案 2 :(得分:1)
最好,我可以告诉,自动增量ID永远不会以错误的顺序返回记录。但是,在按ID排序时,还需要注意另一个案例。
如果您的客户端始终保留要插入的记录,那么在读取记录时,将不会按照创建的相同顺序读取它们。我已经多次遇到这种情况,例如,为具有间歇性网络访问权限的移动应用程序构建客户端时。
答案 3 :(得分:0)
如果有人手动重置表格上的auto_increment,则可能。
答案 4 :(得分:0)
是,删除auto_increment列,然后重新创建一个新列。