MySQL: может ли AUTO_INCREMENT генерировать значения не по порядку? - PullRequest
8 голосов
/ 25 декабря 2011

Предположим, у меня есть таблица:

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

И через веб-сайт Apache / PHP в ответ на веб-запросы я продолжаю делать это:

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

Можно ли предположить, что если row1.ID > row2.ID, то row1.InsertTime >= row2.InsertTime?Или, возможно, из-за неудачного сочетания факторов (многопроцессорный сервер в реплицированной среде с лунами Юпитера в правильном выравнивании и т. Д.) Это может дать сбой?

Примечание: у меня нет проблем.Я пишу новое программное обеспечение, и мне интересно, могу ли я рассчитывать на сортировку по ID и сортировку по датам (в этот столбец будет вставлен только NOW()).

Ответы [ 5 ]

2 голосов
/ 25 декабря 2011

Я думаю, что большинство проблем возникнет из-за вызова NOW () вместо AUTO_INCREMENT.Я подозреваю, что большинство компьютеров в какой-то момент печатают СЕЙЧАС () даты из строя!Обычно это происходит потому, что системный администратор изменил часы, или потому что NTP изменил часы.

2 голосов
/ 25 декабря 2011

Я думаю, что вы будете иметь некоторые несоответствия раз в год из-за летнего времени (конечно, это зависит от настроек сервера). Кроме этого я не понимаю, почему он может потерпеть неудачу.

1 голос
/ 25 декабря 2011

Насколько я могу судить, идентификатор автоинкремента никогда не сможет вернуть записи в неправильном порядке.Однако есть еще один случай, о котором вам необходимо знать при заказе по идентификатору.

Если ваш клиент когда-либо держится за записи, которые будут вставлены позже, тогда, когда записи будут прочитаны, они не будут прочитаны в том же порядке.Я сталкивался с этим несколько раз, например, при создании клиентов для мобильных приложений, которые имеют прерывистый доступ к сети.

0 голосов
/ 11 февраля 2012

Да, удалите столбец auto_increment, затем заново создайте новый.

0 голосов
/ 25 декабря 2011

Это возможно, если кто-нибудь вручную сбросит auto_increment на таблице.

...