URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 3259
[ Назад ]

Исходное сообщение
"mysql primary key."

Отправлено alexey , 19-Апр-05 01:15 
прив.

Собственно что случиться когда primary ket int8) в mysql "закончится" (станет максимально возможным) ? :))))

пок.


Содержание

Сообщения в этом обсуждении
"mysql primary key."
Отправлено sashacrane , 19-Апр-05 03:26 
Кажется перестанет работать.
Покрайней мере в MS SQL 2000 я проверял. Там можно поставить начальное значение счетчика по ближе к концу и добавить одну-две записи. В ответ пишет переполнение или че-то в этом роде.
Попробуй в int записать bigint наверное этот же код ошибки и вылезет в такой ситуации.

"mysql primary key."
Отправлено XAnder , 19-Апр-05 08:57 
>Собственно что случиться когда primary ket int8) в mysql "закончится" (станет максимально
>возможным) ? :))))

В Мускуле результат инкремента столбца, содержащего максимальное значение, - это то же самое значение. А значит произойдёт конфликт в индексе. Таким образом, наблюдается следующая картина:

mysql> create table AutoTest (id int unsigned not null auto_increment, primary key (id));
Query OK, 0 rows affected (0.51 sec)

mysql> insert into AutoTest values (4294967294);
Query OK, 1 row affected (0.25 sec)

mysql> select * from AutoTest;
+------------+
| id         |
+------------+
| 4294967294 |
+------------+
1 row in set (0.05 sec)

mysql> insert into AutoTest values ();
Query OK, 1 row affected (0.00 sec)

mysql> select * from AutoTest;
+------------+
| id         |
+------------+
| 4294967294 |
| 4294967295 |
+------------+
1 row in set (0.00 sec)

mysql> insert into AutoTest values ();
ERROR 1062: Duplicate entry '4294967295' for key 1

mysql> select * from AutoTest;
+------------+
| id         |
+------------+
| 4294967294 |
| 4294967295 |
+------------+
2 rows in set (0.02 sec)

Что и требовалось доказать.

В общем, достаточно неприятно, и если это критично (а это реально может быть критично), используйте bigint - вряд ли доберётесь до конца :) или какой-нибудь другой механизм назначения уникальных номеров.