• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

MySQL - Jak zaktualizować Id (auto_increment) po usunięciu krotki?

VPS Starter Arubacloud
0 głosów
2,313 wizyt
pytanie zadane 18 maja 2015 w SQL, bazy danych przez Filipek Nowicjusz (210 p.)
Witam! Robię blog w PHP, który posty pobiera z bazy danych. Wszystko działa fajnie, dopóki nie zechcę usunąć jakiegoś postu. Wraz z jego usunięciem, kasuje się jego id i w bazie danych zostaje luka, ponieważ nie wiem jak ją załatać. Coś wyczytałem o funkcji ON DELETE, ale nie bardzo wiem jak to zastosować.

3 odpowiedzi

+1 głos
odpowiedź 18 maja 2015 przez Arkadiusz Waluk Ekspert (287,550 p.)
wybrane 18 maja 2015 przez Filipek
 
Najlepsza

Dlaczego chciałbyś łatać tą lukę? Jest to jak najbardziej porządane działanie z jednego prostego powodu - każdy rekord jest unikalny i nie ma możliwości żeby się powtórzył. Takie jest właśnie założenie identyfikatora (jak sama nazwa mówi - coś co jednoznacznie identyfikuje).

To teraz prosty przykład: masz sklep internetowy w którym jest klient X o id 1 oraz klient Y o id 2. Klient X kupuje książkę po czym nagle jego konto z jakiegoś tam powodu jest usuwane. Teraz pytanie co by było gdyby klient Y dostał jego id czyli 1 bo jest wolne? Miałby np. dostęp do historii zamówień, faktur itd (przykładowe funkcje typowego sklepu internetowego) klienta X no bo przecież takie było wcześniej jego id i jest ono przypisane w fakturach czy gdzieś tam jeszcze... Dlatego taka unikalność jest jak najbardziej dobra.

Być może na prostym blogu nie było by takich problemów jak podany wyżej, ale uczmy się od razu robić coś porządnie i bez takich błędów. Jeśli już bardzo byś na prawdę chciał to jedyne co mi przychodzi to zmienić wartość AUTO INCREMENTU na ostatni wolny (trzeba to oczywiście by było jakoś sprawdzać):

ALTER TABLE nazwatabeli AUTO_INCREMENT=5;

A później to chyba każdemu wpisowi ręcznie zmieniać id. Ale pod takim sposobem się absolutnie nie podpisuję bo jest to robienie na siłę gorzej czegoś, co zostało wymyślone i zrobione dobrze.

komentarz 18 maja 2015 przez Comandeer Guru (599,730 p.)
Przykład z id klienta dość nietrafiony z prostego powodu: istnieją klucze obce ;) Oczywiście przy założeniu, że wszystkie dane są w bazie, a nie np. na papierze (wydrukowana fakturka)
komentarz 18 maja 2015 przez Arkadiusz Waluk Ekspert (287,550 p.)
No to być może lekko rzeczywiście nie ale myśląc prosto gdy w jeden i drugiej tabeli zapisane zostanie to samo id klienta, to później zmieniając je w jednej z nich wyjdzie na to, jakby kto inny złożył zamówienie. Taka była moja idea prostego wytłumaczenia ;)
+1 głos
odpowiedź 18 maja 2015 przez Comandeer Guru (599,730 p.)

Ale po co chcesz tę lukę łatać? AI ma głównie zachowywać unikalność rekordów. Do liczenia paginacji i tak użyjesz LIMIT w zapytaniu, więc taka luka nie stanowi żadnego problemu.

0 głosów
odpowiedź 18 maja 2015 przez Filipek Nowicjusz (210 p.)
Chodziło mi głównie o to, że skrypt PHP napisałem w ten sposób, żeby wyświetlał posty kolejno po ID, i gdy między ID była luka, to na blogu pojawiał się pusty post. Ale już sobie poradziłem z tym. Zrobiłem, że za każdym razem gdy usuwam post to do bazy danych wysyła się polecenie UPDATE blog SET id = id - 1 WHERE id > $id_usuwanego_postu;

Może nie jest to najlepsze rozwiązanie, ale działa :)

Dziękuję za odpowiedzi. Teraz już bardziej ogarniam sposób działania AUTO_INCREMENT
komentarz 19 maja 2015 przez Luna Cognita Dyskutant (8,130 p.)
Ten twój sposób jest kompletnie bez sensu XD wystarczy że dodasz ORDER BY ID w zapytaniu i nawet jesli bedzie lista id: 1,2,4,8,11 to i tak posty będą kolejno wyświetlane. Pozdro XD

Podobne pytania

0 głosów
2 odpowiedzi 1,258 wizyt
pytanie zadane 31 marca 2018 w SQL, bazy danych przez niezalogowany
–1 głos
2 odpowiedzi 240 wizyt
pytanie zadane 1 czerwca 2020 w SQL, bazy danych przez WiktroH Mądrala (6,550 p.)
0 głosów
1 odpowiedź 416 wizyt
pytanie zadane 10 lutego 2019 w SQL, bazy danych przez veryape Użytkownik (580 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...