Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwna inkrementacja
Forum PHP.pl > Forum > Bazy danych
lukaskolista
Dzień dobry, mam problem z inkrementacją w MySQL. Normalnie kolumna id ikrementuje się co 1, jednak czasami skacze o wiele wartości w góre, np. o 20, czy nawet 300. Co może być tego przyczyną? Bedę bardzo wdzięczny za wszystkie sugestie.
markuz
Przyczyną może być zły kod wink.gif Pokaż miejsce w którym dodajesz ten rekord.
lukaskolista
  1. ORM::factory('Item')->set(..., ...)->create();

Kod php jest na 100% dobry, przyszedl mi do glowy pomysl z kluczem unique. Na jedna z kolumn mam nalozony wlasnie taki klucz, a jezeli wartosci sie powtarzaja to MySQL moze inkrementowac licznik a nie dodawac rekordu.
Pyton_000
Jak będzie błąd unique to Ci wywala Exception więc nie ma mowy o wykonaniu kolejnego zapytania, chyba że wyciszasz błąd.

Pokaż strukturę BD
lukaskolista
Jednak to byl problem klucza unique, teraz przed dodaniem rekordu robie najpierw select na ta kolumne i sprawdzam, czy wartosc jest juz w tej kolumnie.
nospor
Az zrobilem sobie test. DOdalem kolumne, z kluczem UNIQUE na jednym polu. Dodaje kolejne rekordy, autoincrement ladnie zwieksza się o jeden.
Zaczalem dodawac kolejne rekordy z duplikacją nazwy, nie dodal sie ani jeden rekord.
Zaczalem dodawac znowu normalne rekordy bez duplikacji. Autoincrement zaczał iść normalnie, bez żadnego przeskoku, o ktorym mowisz.

ALbo wiec u siebie nie dzialasz na jednej tabeli tylko na kilku i w ktorejs to wystepuje blad, albo jeszcze cos innego.
Tak wiem, problem rzekomo rozwiązany masz.
Tuminure
@up
Aż też zrobiłem test, bo byłem przekonany, że taki przeskok jest zawsze.

Doszedłem do wniosku, że wszystko zależy od bazy danych, silnika, czy wersji... W przypadku MySQL z InnoDB, dodanie duplikatu powoduje zwiększenie licznika. W przypadku MySQL z MyISAM duplikat nie zwiększa licznika.
Pyton_000
Proszę bardzo smile.gif
http://www.percona.com/blog/2011/11/29/avo...-insert-ignore/

To jest rozwiązanie Twojego problemu
nospor
@Tuminure A faktycznie, nie zwrocilem uwagi, ze dzialam na MyISAM. Dla InnoDB jest jak mowisz, zwieksza licznik. Interesujące. Dobrze wiedziec smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.