![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
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 ?
|
|
|
![]()
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 ?
-------------------- -------------
------ |
|
|
![]()
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? -------------------- |
|
|
![]()
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 |
|
|
![]()
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 |
|
|
![]()
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. -------------------- -------------
------ |
|
|
![]()
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 :
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 |
|
|
![]()
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) -------------------- |
|
|
![]()
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 |
|
|
![]()
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. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:24 |