HooLooVoo
27.12.2005, 18:51:28
Witam
Mam pewien problem.
W tabeli mam pole ID. Jest to klucz glowny tabeli wiec AUTO_INCREMENT sie ladnie robi.
Zanim zaczlem korzystac z tej tabeli do celow uztykowych przeprowadzilem troche testow i nabilem 3149 rekordow, ktore po fazie testow wywalilem.
Gdy moja aplikacja zaczela dzialac pierwszy wpis mial wartosc klucza 3150.
Baza chodzila i nagle na gwiazdke tego roku ID zaczelo wstawiac rekordy od 1.
Zrobil to w momencie gdy osiagnal wartosc 949928
Pole to zdefiniowane jest jako INT(10)
Moje pytanie
dlaczego tak sie stalo??
Posiadam wersje MySQL 4.1.11 i nie moge z reki ustawic mu AUTO_INCREMENT = wartosc poniewaz to dziala dopiero od wersji 4.1.12 wiec nie zrobil tego nikt w ten sposob. Wprawdzie na tabeli robiony jest TRUNCATE ale on nie czysci wartosci AUTO_INCREMENT.
Jesli ktos moze mi powiedziec co moglbo byc tego przyczyna to bede wdzieczny, ew. czy jest mozliwosc jakos sie przed tego typu zachowaiem bazy bronic?
z powazaniem
HooLooVoo
Dex1987
27.12.2005, 22:14:16
sprobuj wyeksportowac cala tabele i potem w pliki *.sql zmien auto_increment na odpowiadajace Twoim potrzeba i importuj baze, powinno zadzialac
pozdrawiam
HooLooVoo
28.12.2005, 09:17:34
Witam
Dziekuje za rade (wykorzystalem), ale to nie jest odpowiedz na moje pytanie.
Nie zalezy mi na tym zeby miec ID pokolei. chodzi o to ze AUTO_INCREMENT wyzerowal sie i zaczal od poczatku. Gdyby nie fakt ze mialem 3150 pustych miejsc w tabeli to by mi sie aplikacja wysypala bo probowalaby wstawic rekord o istniejacym ID.
Tak naprawde to przez przypadek to wylapalem i naszczescie uniknalem utraty danych.
Chcialbym jednak wiedziec co moglo spowodowac cos takiego?
Nie chcialbym zeby cos takiego sie powtorzylo, a monitorowac baz codziennie pod tylko tym kontem nie mam ochoty ani czasu.
Dlatego zwracam sie ponownie z pytaniem:
--------------------------------------------------------------------------------
Co mogło byś przyczyna wyzerowania się AUTO_INCREMENT'a?
--------------------------------------------------------------------------------
z powazaniem
HooLooVoo
elessar
28.12.2005, 10:04:58
Cytat
Wprawdzie na tabeli robiony jest TRUNCATE ale on nie czysci wartosci AUTO_INCREMENT
Od kiedy?
Truncate wlasnie czysci tabele oraz resetuje autoincrement. Dlatego wlasnie Ci sie pojawilo ID = 1.
SongoQ
28.12.2005, 10:14:57
Cytat
Co mogło byś przyczyna wyzerowania się AUTO_INCREMENT'a?
Mysle ze to ktos recznie spowodowal wyzerowanie wartosci, takie rzeczy w bazach sie nie zdazaja, jesli bardzo Ci zalezy poszukaj czy ta wersja nie miala bledow zwiazanych z AUTO_INCREMENT.
HooLooVoo
29.12.2005, 11:05:37
elessar: TRUNCATE nie czysci AUTO_INCREMENTA poczytaj manuala - dla wersji 4.1.11 a z tego co mi wiadomo to nawet dla 5 nie czysci.
SongoQ: Tez myslalem ze ktos recznie wyzerowal ID ale okazalo sie ze nie.
Znalazlem rozwiazanie, a raczej przyczyne.
Moj pierwszy opis byl malo szczegolowy (za co przepraszam).
dokladnie w bazie jest tak.
dwie tabele.
1. trzyma dane z dnia dzisiejszego
2. cala historie
w nocy przerzucam dane (wszystkie lacznie z ID) z 1 do 2 i czyszcze 1.
i bylo ok wszystko. po TRUNCATE 1 auto_increment dalej sie zwiekszal od wartosci na ktorej skonczyl wiec dane wstawiane do 2 mialy ciaglosc (pierwszy rekord mial wartosc 3150 o czym pisalem wczesniej).
po dwoch tygodniach dzialania zrobilem RESET bazy.
I tu jest problem bo po resecie auto_increment w bazie 1 (pustej) ustawia sie na 1
zrobilem testy i okazuje sie ze:
jak w bazie mamy 10 rekordow, usuniemy 5 to:
gdy nie robimy resetu bazy to nastepny rekord bedzie mial wartosc 11
gdy zrobimy reset to nastepny rekord bedzie mial wartosc 6
mam nadzieje ze ta wiedza komus sie przyda
dziekuje wszystkim za pomoc
z powazaniem
HooLooVoo
SongoQ
29.12.2005, 12:07:12
Cytat
jak w bazie mamy 10 rekordow, usuniemy 5 to:
gdy nie robimy resetu bazy to nastepny rekord bedzie mial wartosc 11
gdy zrobimy reset to nastepny rekord bedzie mial wartosc 6
Reset bazy masz na mysli wylaczenie i wlaczenie? Tak auto_increment nie dziala, cos masz nie tak w bazie.
HooLooVoo
29.12.2005, 12:30:13
tak
wylaczenie i wlaczenie bazy.
wiem ze tak nie powinno byc, ale w wersji 4.1.11 tak wlasnie jest.
na standardowych ustwieniach tak sie dzieje.
wydawalo mi sie ze jest cos nie tak i dlatego zrobilem test.
zainstalowalem sobie KRASNALA pod WINDOZA i mam takie same objawy.
tak samo jak pod linem tak i pod winda nie zmienialem zadnych ustawien. zostawilem domyslnie wszystko.
jesli ktos wiec o jakies opcji ktora trzeba zmienic z TRUE na FALSE (lub odwrotnie) i dzieki temu MySQL zaprzestanie takiej zabawy to prosze o podanie jej a napewno ja zmienie.
pozdrawiam
HooLooVoo
PS. SongoQ zrobiles taki test? jak nie a masz mozliwosc to prosze zrob go i powiedz mi jak Tobie zachowuje sie baza.
-----------------oto skrypcik ktory ulatwi testy----------------------------
CREATE DATABASE Baza_testowa;
CREATE TABLE Baza_testowa.Tabela_testowa
(
ID_tabeli_testowej INT(10) unsigned NOT NULL auto_increment,
wartosc VARCHAR(10) NOT NULL default '',
PRIMARY KEY (ID_tabeli_testowej)
)
ENGINE=InnoDB DEFAULT CHARSET=latin2;
INSERT INTO Baza_testowa.Tabela_testowa VALUES
(null, 'wartosc_1'),
(null, 'wartosc_2'),
(null, 'wartosc_3'),
(null, 'wartosc_4'),
(null, 'wartosc_5'),
(null, 'wartosc_6'),
(null, 'wartosc_7'),
(null, 'wartosc_8'),
(null, 'wartosc_9'),
(null, 'wartosc_10');
DELETE FROM Baza_testowa.Tabela_testowa
WHERE ID_tabeli_testowej=6;
DELETE FROM Baza_testowa.Tabela_testowa
WHERE ID_tabeli_testowej=7;
DELETE FROM Baza_testowa.Tabela_testowa
WHERE ID_tabeli_testowej=8;
DELETE FROM Baza_testowa.Tabela_testowa
WHERE ID_tabeli_testowej=9;
DELETE FROM Baza_testowa.Tabela_testowa
WHERE ID_tabeli_testowej=10;
-----------------------teraz reset bazy i ------------------------
INSERT INTO Baza_testowa.Tabela_testowa VALUES (null, 'wartosc_11');
SELECT * FROM Baza_testowa.Tabela_testowa;
i prosze powiedziec jaka wartosc ma ID_tabeli_testowej ostatniego rekordu??
nospor
29.12.2005, 12:35:41
ja wlaczam i wylaczam baze codziennie poprzez wylaczenie kompa na noc. zadne autoincrement sie nie zeruje. cos masz nie tak
SongoQ
29.12.2005, 12:51:40
Cytat
PS. SongoQ zrobiles taki test? jak nie a masz mozliwosc to prosze zrob go i powiedz mi jak Tobie zachowuje sie baza.
Tak zrobilem i dziala ok. Mam wersje 4.1.12 i dziala ok i tez mam domyslne ustawienia. A odnosnie ustawienia ktore za to odpowiada to nie mam pojecia. Szukaj na stronie MySQLa. Tam odnosnie konfigu wszystko znajdziesz.
HooLooVoo
29.12.2005, 13:08:12
nospor: nie chodzi o zerowanie ale o cofanie sie do najwiekszej wartosci. jak wykonalbys skryp to zauwazylbys ze zamiast wpisu o ID_tabeli_testowej=11 pojawi sie wpis o ID_tabeli_testowej=6 (dla wersji 4.1.11)
SongoQ: Dziekuje za przeprowadzenie testu. Z tego co mnie pamiec nie mysli to faktycznie byly wprowadzane poprawki do AUTO_INCREMET'a w wersji 4.1.12
Jak zainstaluje sobie wersje 4.1.12 lub wyzsza to zrobie testy i postaram sie opublikowac moje spostrzezenia
Pozdrawiam
HooLooVoo
SongoQ
29.12.2005, 13:49:42
Ale auto_increment byl juz wczesniej poprawny, bo na 3.x juz prawidlowo dzialalo. Albo faktycznie w tej wersji byl bug albo cos masz w configu nie tak.
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.