Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> INSERT gdy auto_increment osiągnął maksimum ?
sobstel
post 20.04.2005, 13:48:20
Post #1





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


jak rozwiązać problem kiedy np. kolumna jest typu TINYINT i auto_increment osiągnął już liczbę 255? wtedy przy dodawaniu mysql probuje dodac nastepny rekord z id 127 i pojawia się błąd "Duplicate entry".

przykladowa struktura tabeli : id tinyint NOT NULL auto_increment
zapytanie : INSERT INTO tabela VALUES (0)


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
mhs
post 20.04.2005, 13:52:58
Post #2





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


hmm ... zmienic typ kolumny na int polceniem ALTER TABLE ?
Go to the top of the page
+Quote Post
revyag
post 20.04.2005, 13:55:17
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


A co chcesz żeby się wtedy działo ?


--------------------
-------------

------
Go to the top of the page
+Quote Post
SongoQ
post 20.04.2005, 14:03:13
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
przykladowa struktura tabeli : id tinyint NOT NULL auto_increment
zapytanie : INSERT INTO tabela VALUES (0)

Przeciez to Ci zawsze wstawia 0 do tabeli.

A apropo przekroczenia zakresu, co masz takiego w bazie ze udalo Ci sie przekroczyc zakres tinyint?


--------------------
Go to the top of the page
+Quote Post
sobstel
post 20.04.2005, 14:07:39
Post #5





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


@revyag, przypuscmy ze mam 10 rekordow w tabeli ktore maja id porzrzucane powiedzmy gdzies pomiedzy 50 a 255. chcialbym zeby nowy rekord dostal pierwsze wolne id, czyli w tym przykladzie 1.
przepraszam, ale wczesniej nie dalem jasno znac ze chodzi mi o sytucje jak powyzej tzn. kiedy tabela nie jest wypelniona wszystkimi 255 rekordami i sa jeszcze wolne miejsca.

@mhs, chcialbym to zrobic bez zmiany struktury tabeli.

@songq, 1) nie wstawia mi 0, tylko kolejny id wg. wartosci w auto_increment. 2) co do tinyint to sarkazm? jesli tak to niezbyt go zrozumialem.

Ten post edytował sopel 20.04.2005, 14:09:36


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
nospor
post 20.04.2005, 14:11:02
Post #6





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




autoincrement wstawia o 1 więcej od ostatnio dodanego.
jesli chcesz, żeby ci wypełnialo wolne ID, to se musisz skrypcik napisac, który będzie szukał wolnych id i potem wstawiać ręcznie do bazy to id


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
revyag
post 20.04.2005, 14:14:09
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


To się chyba nie uda. Zobacz, powiedzmy że znajdziesz pierwszy wolny rekord i wstawisz tam dane. Wtedy id zostanie automatycznie zwiększone i następnym razem znowu będziesz musiał szukać wolnego rekordu. Istnienie pola autoincrement traci wtedy sens.
Poza tym nie wiem czy nie będzie błedu, kiedy autoincrement zwięszy id o 1, a takie id będzie już istniało w tabeli.


--------------------
-------------

------
Go to the top of the page
+Quote Post
sobstel
post 20.04.2005, 14:16:50
Post #8





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


ok. mialem nadzieje, ze da sie jakos zgrabniej to obejsc.
jedyne co mi przychodzilo do glowy to :

  1. ALTER TABLE tabela DROP id
  2. ALTER TABLE tabela ADD id TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;


Ten post edytował sopel 20.04.2005, 14:17:46


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
SongoQ
post 20.04.2005, 14:27:37
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
nie wstawia mi 0, tylko kolejny id wg. wartosci w auto_increment.
2) co do tinyint to sarkazm? jesli tak to niezbyt go zrozumialem.

Auto_increment wstawia tam gdzie jest null

Ad.2. Chyba cos zle zrozumialem. Zakladasz pole i przypisujesz typ taki aby Twoje dane miescily sie w zakresie. Jesli ma byc tinyint to wiadomo do czego sie ograniczasz. Chodzilo mi o to po co zakladac pole, skoro wiesz ze i tak je przekroczysz, a jesli przekroczysz to baza zwraca blad, poniewaz nie mozna zwiekszyc wartosci i wartosc np dla tinyint zostaje 127(Duplicate entry)


--------------------
Go to the top of the page
+Quote Post
sobstel
post 20.04.2005, 14:33:28
Post #10





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(SongoQ @ 2005-04-20 14:27:37)
Cytat

nie wstawia mi 0, tylko kolejny id wg. wartosci w auto_increment.
2) co do tinyint to sarkazm? jesli tak to niezbyt go zrozumialem.

Auto_increment wstawia tam gdzie jest null

Ad.2. Chyba cos zle zrozumialem. Zakladasz pole i przypisujesz typ taki aby Twoje dane miescily sie w zakresie. Jesli ma byc tinyint to wiadomo do czego sie ograniczasz. Chodzilo mi o to po co zakladac pole, skoro wiesz ze i tak je przekroczysz, a jesli przekroczysz to baza zwraca blad, poniewaz nie mozna zwiekszyc wartosci i wartosc np dla tinyint zostaje 127(Duplicate entry)

1) tam gdzie 0 tez. sprawdz samemu. nie psze tu czegos czego nie uzywalem...

2) tak jak pisalem wyzej, chcialbym wypelnic pierwszy wolny rekord. dane w tabeli są często dodawane i usuwane (ale w danym czasie nie ma ich więcej niż zakres TINYINT), więc auto_increment szybko się wyczerpuje a miejsce w tabeli wciąż jest, więc zakres wystarcza (teoretycznie).


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
SongoQ
post 20.04.2005, 15:21:14
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
1) tam gdzie 0 tez. sprawdz samemu. nie psze tu czegos czego nie uzywalem...

No faktycznie masz racje. Sprawdzilem i kiedy podajesz 0 wtedy uzywa incrament. Wydaje mi sie ze to jest nie prawidlowe, w bazie ORACLE i Postgres takie cos bez problemu przechodzi, ale wsumie tam nie ma autonumerowania tylko sa seqwencje, moze to dlatego.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:24