Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переполнение автоинкремента, переполнение автоинкремента 
V
    Опции темы
Artemon
Дата 21.8.2007, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Что случится если ключевое поле (int) автоинкремент переполнится(будет больше чем 32байта)?


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Lunatikus
Дата 21.8.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



что за СУБД?

Добавлено через 4 минуты и 4 секунды
например,mySQL будет после заполнения пытаться найти свободное значение(если были удалены какие то строки ранее).И только если не найдет,будет ругаться ошибкой переполнения.Сейчас работаю MS SQL Server,но как тут,точно не знаю.Скорее всего тоже будет ругаться.А что тебе стоит установить сразу последнее значение автоинкремента и добавив строку увидеть,что произойдет? smile 


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Artemon
Дата 21.8.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



СУБД MSSQL Server.

Так если я последнеезначение поставлю, то SQL Server возьмет предыдущее (хотя можно в цикле всю БД забить)


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Lunatikus
Дата 22.8.2007, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



Если берет предыдущее,значит,тоже начинает перебирать назад значения и искать свободные.Подставил соответственно первое попавшееся.Поставь последнее и предпоследнее и он тебе поставит третье с конца.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Idsa
Дата 22.8.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: нет
Всего: 62



Цитата(Artemon @  21.8.2007,  17:00 Найти цитируемый пост)
Так если я последнеезначение поставлю, то SQL Server возьмет предыдущее

Странно, но я такого поведения не заметил.
Я создал таблицу с полем  id int IDENTITY(2147483647,1). Уже при изменении второй записи было вызвано исключение "Arithmetic overflow error".

Цитата(Lunatikus @  22.8.2007,  08:04 Найти цитируемый пост)
Поставь последнее и предпоследнее и он тебе поставит третье с конца. 

Насколько я понял, в MSSQL это не работает. Да и вообще, на мой взгляд, в этом нет никакой необходимости... ведь в некоторых таблицах на величине id может быть завязана определенная логика (например, чем больше id, тем позже был сделан заказ). Я понимаю, что подобная логика не есть хорошо... но все же это может ввести в ступор некоторых "разработчиков".

Цитата(Lunatikus @  21.8.2007,  14:49 Найти цитируемый пост)
например,mySQL будет после заполнения пытаться найти свободное значение

Это точная информация?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Lunatikus
Дата 22.8.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



Цитата(Idsa @  22.8.2007,  13:18 Найти цитируемый пост)
Это точная информация?

форум,где я нашел эту информацию
там сказали,что проверяли это и что MySQL так делает.



Цитата(Idsa @  22.8.2007,  13:18 Найти цитируемый пост)
ведь в некоторых таблицах на величине id может быть завязана определенная логика (например, чем больше id, тем позже был сделан заказ

обычно создают отдельное поле для этого.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Idsa
Дата 22.8.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: нет
Всего: 62



Цитата(Lunatikus @  22.8.2007,  13:43 Найти цитируемый пост)
обычно создают отдельное поле для этого. 

Не спорю... Но ведь не зря подобные поля называют autoincrement'ными (не autodecrement'ными или autoнепонятночто). Так что, на мой взгляд, MSSQL делает все правильно smile.

Добавлено @ 14:14
Хотя было бы неплохо, если бы была опция, которая устанавливала бы поведение MSSQL при переполнении: искать пропущенные или генерировать исключение.

Цитата(Artemon @  21.8.2007,  10:39 Найти цитируемый пост)
Что случится если ключевое поле (int) автоинкремент переполнится(будет больше чем 32байта)? 

Почему именно 32 байта? Можно установить поле в bigint, что сведет практически на нет вероятность переполнения.

Это сообщение отредактировал(а) Idsa - 22.8.2007, 14:15


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Lunatikus
Дата 22.8.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



Цитата(Idsa @  22.8.2007,  14:08 Найти цитируемый пост)
Почему именно 32 байта? Можно установить поле в bigint, что сведет практически на нет вероятность переполнения.


Цитата(Idsa @  22.8.2007,  14:08 Найти цитируемый пост)
Хотя было бы неплохо, если бы была опция, которая устанавливала бы поведение MSSQL при переполнении: искать пропущенные или генерировать исключение.


+2
а поле и есть автоинкрементное.Основное его действие-увеличиваться на указанный шаг при добавлении поля.Остальное-дополнения,которые облегчают жизнь.Кстати насчет того,чтобы добавить функцию выбора типа поведения AIinc'а: видимо,решили сбросить эту работу на программистов-в конце концов программер может замутить такое сложное и разнообразное поведение,которое создателям MS SQL Srv не снилось.Да и загружать СУБД лишним не следует. 


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Idsa
Дата 22.8.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: нет
Всего: 62



Цитата(Lunatikus @  22.8.2007,  14:57 Найти цитируемый пост)
Да и загружать СУБД лишним не следует.

Что-то не похоже, что бы разработчики СУБД придерживались этого критерия... Особенно это касается Oracle 11g smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Lunatikus
Дата 22.8.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



не знаком ,такая зверюга?К тому же мы говрим о разработчиках MS SQL Srv.Oracle ваще отдельная песня...такс,кончаем флудить и ждем Artemon'а.Пусть-таки закроет тему или выскажет что-нибудь по поводу решения своего вопроса.



--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
kobra
Дата 22.8.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



id int IDENTITY(2147483647,-1).  - будет уменшать до -2147483647 
id int IDENTITY(-2147483647,1).  - будет увеличивать до 2147483647 
это больше 4 милиарда.
ну если не хватает можно ползовать bigint.
а то чтоб после переполнения искать пропуски, по моему не правилно
PM MAIL   Вверх
Lunatikus
Дата 22.8.2007, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



интересно,что за таблица может содержать ОДНОВРЕМЕННО больше 4млрд записей? smile 


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
kobra
Дата 22.8.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



например билинг.
4 милиард не так и много, если реално посмотреть
PM MAIL   Вверх
Lunatikus
Дата 22.8.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



ну не знаю,если честно,мне со своей колокольни видится более выгодным разбивать на несколько таблиц и делать механизм последовательного доступа к любым данным,фильтрации и т.д.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
kobra
Дата 22.8.2007, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



для этого разработаны специальные механизмы. 
но эта из другой песни
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.1280 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.