Autor Zpráva
AM_
Profil
Zdravím,
nevím, pod čím to googlit, tak se vás zeptám: dá se na sloupec auto_increment spolehnout, že se nikdy nesníží - tj. že pokud do něj nějak jinak nezasáhnu, bude vždy vkládat ID větší, než všechna ostatní ID?

Co potřebuji: mám tabulku nějakých údajů a občas potřebuju vytáhnout ten z nich, který byl vložen do tabulky nejpozději, případně rozlišit všechny, které tam byly vloženy před ním.

Jde o to, že když budu mít třeba záznamy 1,2,3 a smažu záznam 2 - nemůže se stát, že auto_increment nějak "chytře" zaplní mezeru a opět vytvoří záznam s ID 2?
Empiricky vím, že když smažu záznam 3 (resp. nejvyšší ID), auto_increment se nějak automaticky sníží asi aby ušetřil rozsah a příště opět vytvoří záznam č.3.

Vím, že by to bylo možné řešit jinými způsoby, třeba vložit do DB sloupec DATETIME nebo prostě INT, kde si toto chování zajistím sám, ale připadá mi zbytečné komplikovat program novým databázovým sloupcem, když by to možná šlo řešit pomocí ID, jen se chci ujistit, že je na to spoleh ;)
Alphard
Profil
Ne, mezeru nikdy nezaplní. Aspoň jsem o tom byl doteď přesvědčen.
Na jaké verzi a nastavení pozoruješ to snížení? Běžně to určitě nedělá.
V tabulce TABLES v databázi information_schema je sloupec auto_increment, který by se měl snížit jen při truncate nebo explicitním příkazu.


For MyISAM and BDB tables you can specify AUTO_INCREMENT on a secondary column in a multiple-column index. In this case, the generated value for the AUTO_INCREMENT column is calculated as MAX(auto_increment_column) + 1 WHERE prefix=given-prefix.
In this case (when the AUTO_INCREMENT column is part of a multiple-column index), AUTO_INCREMENT values are reused if you delete the row with the biggest AUTO_INCREMENT value in any group. This happens even for MyISAM tables, for which AUTO_INCREMENT values normally are not reused.

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
Kajman_
Profil *
Myslím, že to snížení při mazání může nastat pro maximální číslo v nastaveném datovém typu.
AM_
Profil
Alphard:
In this case (when the AUTO_INCREMENT column is part of a multiple-column index), AUTO_INCREMENT values are reused if you delete the row with the biggest AUTO_INCREMENT value in any group.
to bude asi ono. čili se zaplňováním mezer problém nenastane, snad to bude dost spolehlivé :)

Kajman:
to v mé aplikaci nehrozí, miliardy záznamů v dané tabulce určitě nebudou.

Díky za odpovědi

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0