Поле, созданное с автозаполнением типа первичный ключ ID.

Автор adi_den2013, 5 ноября 2013, 17:42

0 Пользователи и 1 гость просматривают эту тему.

adi_den2013

Подскажите, в  случае достижения предельного значения (например, размерность поля Numeric 10 - 9999999999)  будет переполнение данных или счетчик обнулится?  :roll:
Яна (in real)

JohnSUN

 ;D А вариант, что сервер БД вообще откажется что-то вставлять и начнёт ругаться страшными словами "Заплатите автору базы данных её гонорар или не сможете работать дальше!" даже не рассматриваешь?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Ну разве шо я в макросе этот слоган пропишу  и покажу начальству ;) . Понятненько. Значит увеличу размер поля раз в 5  и будем решать проблемы по мере их поступления ;D
Яна (in real)

CyberDaemon

Цитата: adi_den2013 от  6 ноября 2013, 13:16
Ну разве шо я в макросе этот слоган пропишу  и покажу начальству ;) . Понятненько. Значит увеличу размер поля раз в 5  и будем решать проблемы по мере их поступления ;D
А не проще сразу создавать базу в MariaDB(MySQL), или в PgSQL?

adi_den2013

Стрелять из гаубицы по воробьям (с)?

Из-за базы в 1-1,5 тыс.записей?  Я так поинтересовалась, для общего развития. Вон у меня на прошлой работе БД были под полтора миллиона записей (под ОРАКЛ есс-но) - это впечатляет.
Яна (in real)

CyberDaemon

Цитата: adi_den2013 от  6 ноября 2013, 13:52
Стрелять из гаубицы по воробьям (с)?

Из-за базы в 1-1,5 тыс.записей?  Я так поинтересовалась, для общего развития. Вон у меня на прошлой работе БД были под полтора миллиона записей (под ОРАКЛ есс-но) - это впечатляет.
Ну, если 10 разрядов может не хватить, то это явно не 1.5 тысячи записей.

adi_den2013

Мне врать незачем. Баланс предприятия - 396 счетов + итоги. Номера счетов (ID) -добавляются единично и очень редко. А вот итоги  (при  наличии ошибок) пересчитываются до десятка раз за отчет. Убрать счетчик и вручную (макросом) давать полю ID значение?  :roll:

Зачем тогда вообще во внутренней базе автозаполнение, если элементарное переполнение предусмотрено?
Яна (in real)

Hasim

Даже если вы будете ежедневно добавлять по 100000 записей, то счетчик переполнится через 300 лет.

JohnSUN

А я когда-то своими глазами видел такую базу... Таблица клиентов была с ID типа БАЙТ (tinyint(3))! Еггог не был переведен на "человеческий" язык... Увидев ужасные слова "Duplicate entry '255' for key 'PRIMARY'...", владельцы базы по какой-то причине не стали обращаться к автору программы, позвали "независимого эксперта".
Открываю исходники (благо, вся разработка велась на машине заказчика, все скрипты сохранились) и в одном из комментариев читаю:
// Lheu! Gthtl ntv rfr vtyznm hfpvthyjcnm gjkz nht,eq ltymub dgthtl!
Что называется, sapienti sat...
Аккуратненько закрыл редактор, развел руками, извинился и ушел: цеховая солидарность важнее любых гонораров.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Отвечу цитатой из своего поста:

Цитата: adi_den2013 от  6 ноября 2013, 11:52Я так поинтересовалась, для общего развития.

Не думала, что мой вопрос так заденет...  Извините, кого оторвала от важных дел  :-[
Яна (in real)

Hasim

Ни у кого из присутствующих счетчики не переполнялись.
Что будет, никто не знает.
Нужно или лезть в исходники и смотреть, что там предусмотрено на этот счет.
Или проводить собственные эксперименты.

JohnSUN

Что будет? При попытке внести новую запись возникнет исключение, которое прервёт операцию. Если в коде не предусмотрен перехват этого исключения, программа нехорошо (не по-нашему) выругается и прекратит работу
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Hasim

Цитата: JohnSUN от  6 ноября 2013, 14:30Что будет? При попытке внести новую запись возникнет исключение, которое прервёт операцию. Если в коде не предусмотрен перехват этого исключения, программа нехорошо (не по-нашему) выругается и прекратит работу
Это, увы, голословное утверждение, не основанное ни на собственном опыте, ни на изучении кода.

JohnSUN

Цитата: Hasim от  6 ноября 2013, 15:36
Это, увы, голословное утверждение, не основанное ни на собственном опыте, ни на изучении кода.
Дерзко... Хотишь доказательств? Их есть у меня...
Создаем новую базу, рисуем тестовую таблицу. Первое поле - автоинкрементный ID, скажем, Integer. Второе - произвольное, пусть тоже Integer.
Идем в Сервис-SQL, выполняем что-то вроде
ALTER TABLE "tst" ALTER COLUMN "ID" RESTART WITH 2147483646
Это странное число - 2147483646 - всего лишь 2^31-2, то есть почти ожидаемый предел для Integer.
Открываем таблицу, начинаем вбивать цифирьки во второе поле и наблюдаем.
2147483646, 2147483647, оп-па! - то, о чем подозревала Яна: из-за переполнения имеем -2147483648, -2147483647, -2147483646...
Ну, бить все доступные значения не интересно, и так понятно, что счетчик перевалит через ноль и пойдет вверх.
Возвращаемся в Сервис-SQL, выполняем
ALTER TABLE "tst" ALTER COLUMN "ID" RESTART WITH 2147483644
Добиваем в таблицу нужное для эффекта количество строк и видим то, что и должны были увидеть

Дык, Hasim, как насчет "Извините, был не прав"?


[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Я догадывалась, что на слабО тут не прокатит  8-)

Цитата: JohnSUN от  6 ноября 2013, 14:52Hasim, как насчет "Извините, был не прав"?

;)
Яна (in real)