Przeindeksowanie tabeli

0

Witam,

czy jest możliwe przeindeksowanie tabeli tak aby wszystkie rekordy liczone były od 1 i nie było "dziur"?
tzn. mam np taką tabelę:

id | dane
1 | aaaa
2 | bbbb
5 | cccc
6 | gggg
10 | ffff

a chciałbym uzyskać:

id | dane
1 | aaaa
2 | bbbb
3 | cccc
4 | gggg
5 | ffff

dzięki za pomoc

0

ID nie jest do przechowywania liczby porządkowej!!! Po co Ci to to dostaniesz odpowiednie rozwiązanie

0
Misiekd napisał(a)

ID nie jest do przechowywania liczby porządkowej!!! Po co Ci to to dostaniesz odpowiednie rozwiązanie

W aplikacji, którą piszę mam możliwość usunięcia odpowiednich rekordów. Wówczas zostaje mi dziura. Wszystko jest osadzone w JTable. Przy dodawaniu zliczam ile jest wierszy, dodaję 1 i mogę insertować kolejne pozycje.
I właśnie problem leży gdy jest taka locha, ponieważ id się nie zgadzają/powielają.
Wymyśliłem, że można utworzyć kolejną tabelę, do której każdy wiersz się przepisze a numerowanie id rozpocznie się od początku, wyczyści się pierwszą i przekopiuje z drugiej do pierwszej. Problem w tym, że nie jestem za bardzo obeznany w poleceniach SQL. :)

0

poszukaj sobie o autoincrement w bazie, której używasz

0

A w czym ci przeszkadza to że są dziury? Nowe ID odczytaj stosując MAX(id) +1 i nic na siebie nie najdzie.

0

Stosuję to od zawsze i jeszcze nigdy nic się nie posypało. W firmie takie rozwiązanie jest stosowane w duzym systemie i tez nigdy nie było błędu.
Chociaż zdaję sobie sprawę z zagrożenia.

0
MiL napisał(a)

A w czym ci przeszkadza to że są dziury? Nowe ID odczytaj stosując MAX(id) +1 i nic na siebie nie najdzie.

ok, dzięki. Super! :) przetestuję później.

Misiekd:

ALTER TABLE mytable AUTO_INCREMENT=1

nie działa. :/
Ale również dzięki za zainteresowanie tematem.

0
gargamel napisał(a)

Misiekd:

ALTER TABLE mytable AUTO_INCREMENT=1

nie działa. :/

zdziwił bym się gdyby zadziałało

MiL napisał(a)

W firmie takie rozwiązanie jest stosowane w duzym systemie i tez nigdy nie było błędu.
podaj nazwę tej firmy abym wiedział czyje rozwiązania obchodzić szerokim łukiem

0

Dokładnie. Dwóch wpisów się nie da zrobić w tym samym czasie (praktycznie).

Oddając numerację ID SZBD nie znamy wtedy jego ID (np do dalszych podrzędnych insertów).

0
... napisał(a)

Oddając numerację ID SZBD nie znamy wtedy jego ID (np do dalszych podrzędnych insertów).
Po to np. mysql ma last_insert_id().

0
Misiekd napisał(a)
gargamel napisał(a)

Misiekd:

ALTER TABLE mytable AUTO_INCREMENT=1

nie działa. :/

zdziwił bym się gdyby zadziałało

a możesz po prostu napisać jak powinno wyglądać to polecenie? :)

0

a wiem z jakiej bazy korzystasz?

0
gargamel napisał(a)

Przy dodawaniu zliczam ile jest wierszy, dodaję 1 i mogę insertować kolejne pozycje.

koszmarny błąd projektowy.
jak sobie wyobrażasz przeindeksowanie po usunięciu pierwszego rekordu z kilku milionów?
jak sobie radzisz z relacjami przy takim podejściu?

MiL napisał(a)

Stosuję to od zawsze i jeszcze nigdy nic się nie posypało. W firmie takie rozwiązanie jest stosowane w duzym systemie i tez nigdy nie było błędu.
Chociaż zdaję sobie sprawę z zagrożenia.

stosowanie takiego rozwiązania spowodowane niewiedzą to głupota (też tak robiłem... 12 lat temu, w ramach małej stronki, jak się uczyłem mysql). robienie tego świadomie to ignorancja. zadziała sto tysięcy razy. stutysięczny pierwszy spowoduje stratę kilkuset tysięcy zeta u strategicznego klienta.

0
Misiekd napisał(a)

a wiem z jakiej bazy korzystasz?

z MySQL'a.

0
ŁF napisał(a)
gargamel napisał(a)

Przy dodawaniu zliczam ile jest wierszy, dodaję 1 i mogę insertować kolejne pozycje.

koszmarny błąd projektowy.
jak sobie wyobrażasz przeindeksowanie po usunięciu pierwszego rekordu z kilku milionów?
jak sobie radzisz z relacjami przy takim podejściu?

</quote>

Dlatego proszę o pomoc. Ja dopiero od dwóch tygodni mam styczność z bazami danych.. Twoje 12 lat temu moje teraz...

0

http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html poczytaj tam co robi kod, który podałeś.
Aby zmienić typ pola możesz zrobić tak

ALTER TABLE dupa DROP COLUMN id;
ALTER TABLE dupa ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT FIRST;

możesz też próbować przez alter table modify ale masz duże szanse, że Ci nie przejdzie, szczególnie jak będziesz miał jakieś dane w tabeli :p

0
Misiekd napisał(a)

http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html poczytaj tam co robi kod, który podałeś.
Aby zmienić typ pola możesz zrobić tak

ALTER TABLE dupa DROP COLUMN id;
ALTER TABLE dupa ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT FIRST;

możesz też próbować przez alter table modify ale masz duże szanse, że Ci nie przejdzie, szczególnie jak będziesz miał jakieś dane w tabeli :p

skorzystałem z kodu ale dodałem jeszcze PRIMARY KEY, bo pluł błędem.

dzięki i pozdro

1 użytkowników online, w tym zalogowanych: 0, gości: 1