Как такое сделать
От: Аноним  
Дата: 01.02.06 17:56
Оценка:
У меня есть столбец 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
Re: Как такое сделать
От: CKopT  
Дата: 01.02.06 18:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня есть столбец 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 команды?
Re[3]: Как такое сделать
От: Пацак Россия  
Дата: 01.02.06 18:52
Оценка: 5 (1) +3 :))
Здравствуйте, Аноним, Вы писали:

А>Просто я так подумал что рано или поздно автоинкременыое поле заполниться максимальным значением и всё кирдык или оно анлимитед?


Беконечного ничего не бывает, кирдык рано или поздно непременно наступит. Можно даже прикинуть когда. Итак, bigint — это 8 байт, т.е. 64 бита или 18446744073709551616 различных значения. Если генерить по одному числу каждую милисекунду, то кирдык со всей неотвратимостью наступит уже через
18446744073709551 секунд или
307445734561825 минут или
5124095576030 часа или
213503982334 дня или
584542046 лет

Так что пожалуй действительно стоит подстраховаться.
Ку...
Re[3]: Как такое сделать
От: CKopT  
Дата: 01.02.06 18:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ а примерчик мона ?

А>Просто я так подумал что рано или поздно автоинкременыое поле заполниться максимальным значением и всё кирдык или оно анлимитед?
А>Или скажи как сформировать уникальное неповторяющееся значение типа 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 команда гененрирующая уникальное значение ?
Re[2]: Как такое сделать
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 02.02.06 06:25
Оценка: -1
Здравствуйте, CKopT, Вы писали:



CKT>Добрый вечер. Не знаю насколько Вам это необходимо, но исходя из моего опыта использования автоинкрементного поля в таблицах MS SQL Server, такая задача никогда не возникала. Т.е. автоинкрементное поле требуется для автоматической генерации следующего значения, которое просто будет уникальным.

CKT>Кроме того, оно формируется не как MAX+1, а как
CKT><какая-то внутренняя системная величина>+<некий заданный системный шаг>.
CKT>Эти системные величины скорее всего относятся к системным величинам открытого сеанса (нечто про это я читал в HELP).

Изменить текущее значение автоинкрементной колонки в MSSQL 2000 можно посредством команды DBCC CHECKIDENT
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[5]: Как такое сделать
От: Пацак Россия  
Дата: 02.02.06 08:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>дело в том что там стоит стоит... а потом бах насканирует чегонить и как бац.... и сразу лет 10 по твоему календарю намотает...


А гига[герцов,байтов] у сервера хватит?

А>Короче я решил поставить mssql 2005 чёт для таких обьемов боюсь mysql пользовать не справиться боюсь...


Если не секрет, "для таких" — это для каких? А то может и не заморачиваться с MS SQL, может и какой-нибудь Firebird подойдет? А то может и мускуля хватит?

А>Теперь уже другой вопрос: в mssql 2005 есть sql команда гененрирующая уникальное значение ?


Тебе сюда
Автор(ы): Иван Бодягин
Дата: 07.02.2004
Уникальная идентификация записей в таблице, является практически основой реляционных СУБД. Вообще в реляционной теории предполагается, что если две записи ни чем друг от друга не отличаются, то это явная избыточность, и количество таких записей можно сократить до одной. Собственно вопросам этой самой идентификации, каковых возникает на удивление много, и посвящен этот FAQ.
Ку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.