Согласно веб-сайту MySQL, подписанный bigint может достигать 18446744073709551615. Что, если мне нужно число больше, чем это для автоматического увеличения первичного ключа?
Что делать, если мне нужен очень-очень большой идентификатор автоинкремента?
comment
Приведите реальный пример, где вам нужно это, что уже очень большое число
- person Shakti Singh   schedule 23.04.2011
comment
Я не могу представить теоретическую ситуацию, в которой это было бы необходимо... но если это так, просто используйте строку, которую вы увеличиваете самостоятельно. В любом случае любая база данных выйдет из строя LONG, прежде чем попадет в такое количество строк.
- person Mikecito   schedule 23.04.2011
Ответы (3)
Если вы будете вставлять 1 миллион записей в секунду 24x7, то для достижения предела потребуется 584542 года.
Я надеюсь, что к тому времени следующая версия MySQL будет поддерживать столбцы идентификаторов большего размера :)
person
9000
schedule
23.04.2011
Фактическая «математика» равна 18446744073709551615 / (1000000*60*60*24*365,25), довольно просто: миллион, 60 секунд в минуте, 60 минут в часе, 24 часа в сутках, 365 дней в году ( и одна четверть для високосных лет, что на самом деле не нужно). Это не требует какого-либо размышления.
- person 9000; 23.04.2011
Ответ на это выражение 58,45420460906263 года, а не 584542 года, верно?
- person Jason; 01.07.2013
@Jason: я не понимаю, как. Я все еще предполагаю, что заполнение 64-битного счетчика миллионами в секунду займет более 584 тысяч лет. В этом весь смысл: хотя 64 бита определенно ограничены, они безграничны для практических целей.
- person 9000; 01.07.2013
Возможно, я должен спросить в другом месте. Но я попытался использовать калькулятор в Windows и MS Excel, и он не может содержать все эти числа 18446744073709551615. Что вы, ребята, использовали? С++?
- person Fandi Susanto; 26.09.2014
@FandiSusanto: для подобных расчетов на обратной стороне конверта я лично использую
python
, irb
, ghci
или даже bc
, в зависимости от того, что есть под рукой. Извините, calc.exe
— это одна из тех вещей, которыми я никогда не пользуюсь. Хотя ни bash
с использованием $(( ))
, ни elisp не могут справиться с этим вычислением; довольно многие такие инструменты ограничены размером int
или long int
архитектуры, на которой они работают.
- person 9000; 26.09.2014
С таким номером (от 1 до 18446744073709551615) можно дать всем животным на земле уникальный ID :)
person
Sourav
schedule
23.04.2011
Я полагаю, ты облажался? Вы можете избавиться от автоматического приращения MySQL и можете использовать базовое число 64, которое вы увеличиваете самостоятельно.
person
Ben
schedule
23.04.2011