|
Тема
|
Какво става с auto_increment след 4294967295?
|
|
Автор |
Dakota (гол на деня) |
Публикувано | 08.09.02 12:22 |
|
Какво се случва с auto_increment поле, което е примерно тип INT и достигне стойност 4294967295 (максималната unsigned за този тип)?
И в този дух...желателно ли е да се слага полето от по-висок тип: BIGINT?
"Да живееш - значи да се променяш." - Анатол Франс
| |
Тема
|
Re: Какво става с auto_increment след 4294967295?
[re: Dakota]
|
|
Автор |
voyager (бастун) |
Публикувано | 09.09.02 09:35 |
|
Незнам какво става, след като се достигне края. Сигурно се нулира, дава грешка или стои същото. Може да се записва с експонента, ама едва ли, понеже е инт. Но определено няма нищо лошо да си зададеш БИГИНТ, ако смяташ, че може да имаш толкова много редове.
It`s more fun to compute
| |
Тема
|
Re: Какво става с auto_increment след 4294967295?
[re: Dakota]
|
|
Автор |
Valeri () |
Публикувано | 09.09.02 10:50 |
|
Внимавай с bigint, защото стойността, връщана от mysql_insert_id() ще е неправилна, защото апито конвертира стойността в long. По-добре ще е да използваш LAST_INSERT_ID() в SQL запитване.
![](http://i.dirbg.com/clubs/icons/smile.gif) ![](http://i.dirbg.com/clubs/icons/cool.gif)
| |
Тема
|
Re: Какво става с auto_increment след 4294967295?
[re: Dakota]
|
|
Автор |
salle (Един такъв) |
Публикувано | 09.09.02 10:58 |
|
Връща грешка Dulpicate Key за всеки следващ опит за INSERT
можеш да го пробваш като си направиш таблица със tinyint auto_increment
и вмъкнеш 128 реда
| |
|
За auto_increment, salle ти е отговорил. Е не е задължително да въвеждаш 128 записа, може първия който вкараш да със стойност на auto_increment полето = 127 и при следващия вкаран ще ти даде: Duplicate entry '127' for key 1.
Ако се опиташ да вкараш стойност по-голяма/по-малка от обхвата системата ще я приравни на максималната/минималната. Точно заради това ще даде тази грешка. Ще се опита да вкара пак 127.
Желателно е типа на полето да се избере в зависимост от конкретните нужди. Щом ще имаш толкова записи, защо не. Иначе какво? Да разделяш записите в отделни таблици не е добра идея според мен.
__________________________________
Пътят към ада е осеян с добри намерения
| |
|
Максималния размер на BIGINT UNSIGNED (8 байта) е 18446744073709551616 = 2^ 8*8
И ако някой се притеснява, че подобна таблица може лесно и бързо да се препълни ... нека предположим, че сървъра може да понесе да кажем 12 000 000 INSERT/sec това ще се случи след:
mysql> select @sec:=power(2,8*8)/(12000000) as secs, @hours:=sec_to_time(@sec) as hours, @hours/(365*24) as years;
+------------------------+-----------------+-----------------+
| secs | hours | years |
+------------------------+-----------------+-----------------+
| 1537228672809.12939453 | 427007964:40:09 | 48745.201369863 |
+------------------------+-----------------+-----------------+
Аз не бих се притеснявал за сървърите след 48 хиляди години а вие? ![](http://i.dirbg.com/clubs/icons/wink.gif)
| |
|
![](http://i.dirbg.com/clubs/icons/laugh.gif) ![](http://i.dirbg.com/clubs/icons/laugh.gif)
Трябва да се мисли и за бъдещето все пак ![](http://i.dirbg.com/clubs/icons/wink.gif) ![](http://i.dirbg.com/clubs/icons/wink.gif)
![](http://i.dirbg.com/clubs/icons/laugh.gif) ![](http://i.dirbg.com/clubs/icons/laugh.gif) ![](http://i.dirbg.com/clubs/icons/laugh.gif)
__________________________________
Пътят към ада е осеян с добри намерения
| |
|
|
|
|