У меня есть столбец id типа bingint. На нем стоит авто инкремент.
Проблема в следующем... я удаляю часть записей и добавляю новые, но числа инкрементируються как (MAX + 1) как сделать так чтобы например так.
Здравствуйте, Аноним, Вы писали:
А>У меня есть столбец id типа bingint. На нем стоит авто инкремент. А>Проблема в следующем... я удаляю часть записей и добавляю новые, но числа инкрементируються как (MAX + 1) как сделать так чтобы например так.
А>Исходная таблица: А>1 А>2 А>3 А>4 А>5 А>11 А>15 А>18
А>Как происходит после инсерта А>1 А>2 А>3 А>4 А>5 А>11 А>15 А>18 А>19 А>20 А>21 А>22
А>Надо чтобы было так А>1 А>2 А>3 А>4 А>5 А>6 А>7 А>8 А>9 А>10 А>11 А>12 А>15 А>18
А>Тоесть несуществующий цифры занимались... бд MySQL 5.0
Добрый вечер. Не знаю насколько Вам это необходимо, но исходя из моего опыта использования автоинкрементного поля в таблицах MS SQL Server, такая задача никогда не возникала. Т.е. автоинкрементное поле требуется для автоматической генерации следующего значения, которое просто будет уникальным.
Кроме того, оно формируется не как MAX+1, а как
<какая-то внутренняя системная величина>+<некий заданный системный шаг>.
Эти системные величины скорее всего относятся к системным величинам открытого сеанса (нечто про это я читал в HELP).
Подытоживая, я бы дополнительно использовал какой-нить другой идентификатор (поле в таблице), отвечающий необходимым требованиям. Есть небольшой пример использования автоинкр. поля совместно с другим полем, содержащим ключевые-порядковые значения (что-то вроде составного ключа)
Re[2]: Как такое сделать
От:
Аноним
Дата:
01.02.06 18:31
Оценка:
ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ а примерчик мона ?
Просто я так подумал что рано или поздно автоинкременыое поле заполниться максимальным значением и всё кирдык или оно анлимитед?
Или скажи как сформировать уникальное неповторяющееся значение типа BINGINT в MySQL с помощью SQL команды?
Здравствуйте, Аноним, Вы писали:
А>Просто я так подумал что рано или поздно автоинкременыое поле заполниться максимальным значением и всё кирдык или оно анлимитед?
Беконечного ничего не бывает, кирдык рано или поздно непременно наступит. Можно даже прикинуть когда. Итак, bigint — это 8 байт, т.е. 64 бита или 18446744073709551616 различных значения. Если генерить по одному числу каждую милисекунду, то кирдык со всей неотвратимостью наступит уже через
18446744073709551 секунд или
307445734561825 минут или
5124095576030 часа или
213503982334 дня или
584542046 лет
Так что пожалуй действительно стоит подстраховаться.
Здравствуйте, Аноним, Вы писали:
А>ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ а примерчик мона ? А>Просто я так подумал что рано или поздно автоинкременыое поле заполниться максимальным значением и всё кирдык или оно анлимитед? А>Или скажи как сформировать уникальное неповторяющееся значение типа BINGINT в MySQL с помощью SQL команды?
Исключение пропусков значений в автоинк. поле типа BIGINT критично ?
Оно у тебя для чего используется ?
Всё-таки я думаю, что BIGINT тебе за глаза хватит. Что будет в MySQL при его переполнении — я не знаю, ни разу не доводилось испытать.
Предоложим, что есть таблица
keyid userID fist_name last_name
1 IVA1 Иван Иванов
2 IVA2 Андрей Иванов
4 CHAP4 Василий Чапаев
8 ANDR8 Сергей Анреев
и т.д. Здесь полю userID отводится центральная роль, а keyid — просто INTовый автоинкремент.
С уважением.
Re[4]: Как такое сделать
От:
Аноним
Дата:
02.02.06 02:51
Оценка:
дело в том что там стоит стоит... а потом бах насканирует чегонить и как бац.... и сразу лет 10 по твоему календарю намотает... елс итак посчитать... Короче я решил поставить mssql 2005 чёт для таких обьемов боюсь mysql пользовать не справиться боюсь...
Теперь уже другой вопрос: в mssql 2005 есть sql команда гененрирующая уникальное значение ?
CKT>Добрый вечер. Не знаю насколько Вам это необходимо, но исходя из моего опыта использования автоинкрементного поля в таблицах MS SQL Server, такая задача никогда не возникала. Т.е. автоинкрементное поле требуется для автоматической генерации следующего значения, которое просто будет уникальным. CKT>Кроме того, оно формируется не как MAX+1, а как CKT><какая-то внутренняя системная величина>+<некий заданный системный шаг>. CKT>Эти системные величины скорее всего относятся к системным величинам открытого сеанса (нечто про это я читал в HELP).
Изменить текущее значение автоинкрементной колонки в MSSQL 2000 можно посредством команды DBCC CHECKIDENT
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
Здравствуйте, Аноним, Вы писали:
А>дело в том что там стоит стоит... а потом бах насканирует чегонить и как бац.... и сразу лет 10 по твоему календарю намотает...
А гига[герцов,байтов] у сервера хватит?
А>Короче я решил поставить mssql 2005 чёт для таких обьемов боюсь mysql пользовать не справиться боюсь...
Если не секрет, "для таких" — это для каких? А то может и не заморачиваться с MS SQL, может и какой-нибудь Firebird подойдет? А то может и мускуля хватит?
А>Теперь уже другой вопрос: в mssql 2005 есть sql команда гененрирующая уникальное значение ?