Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dziwna inkrementacja
lukaskolista
post
Post #1





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
markuz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Przyczyną może być zły kod (IMG:style_emoticons/default/wink.gif) Pokaż miejsce w którym dodajesz ten rekord.
Go to the top of the page
+Quote Post
lukaskolista
post
Post #3





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował lukaskolista 2.10.2014, 13:44:36
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
lukaskolista
post
Post #5





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
Tuminure
post
Post #7





Grupa: Zarejestrowani
Postów: 178
Pomógł: 49
Dołączył: 16.04.2012
Skąd: Bytom

Ostrzeżenie: (0%)
-----


@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.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Proszę bardzo (IMG:style_emoticons/default/smile.gif)
http://www.percona.com/blog/2011/11/29/avo...-insert-ignore/

To jest rozwiązanie Twojego problemu
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@Tuminure A faktycznie, nie zwrocilem uwagi, ze dzialam na MyISAM. Dla InnoDB jest jak mowisz, zwieksza licznik. Interesujące. Dobrze wiedziec (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.09.2025 - 20:09