Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

Rekordy widmo po wgraniu danych w bazie MySQL

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

Rekordy widmo po wgraniu danych w bazie MySQL

Post 07.11.2017, 11:10:57

Witam,

Mam dwie tabele TAB1 i TAB2. TAB1 traktuję jako tabelę przejściową a TAB2 jako docelową. Dane do TAB1 ładuję z pliku exls zapisanego w formacie txt. Dane do TAB2 ładuję przez INSERT INTO z TAB1. Gdy dane w TAB1 nie są mi już potrzebne to usuwam je z TAB1. Niby wszystko proste a jednak pojawiło się kilka pytań i problemów:

1) nie rozumiem logiki nadawania kolejnego nr Id gdy jest to pole autoincrement. Otóż, wyniki zapytań po załadowaniu danych do tabeli są takie:
MAX(Id) = 311928
SELECT * FROM baza.TAB1 ORDER BY Id DESC wyrzuca nam najwyższe Id=311928
SHOW TABLE STATUS auto_increment = 327675

Po kolejnym załadowaniu danych okazuje się, że pierwsze Id dla nowych danych to 327675. Nie rozumiem tego. Dlaczego nie jest to 311929?

2) jak mam przenieść dane z TAB1 do TAB2 żeby Id w TAB2 miało nr niezależne od TAB1. Przykład:
max Id w TAB2 = 10 --> CHCĘ ABY PO KOLEJNYM ZAŁADOWANIU DANYCH, NOWE DANE ZACZYNAŁY SIĘ OD Id=11
dane znajdujące się w TAB1 mają Id zaczynające się od 100 po przeniesieniu do TAB2 nowe dane maja Id takie jak w TAB1. Użyłam polecenia (pola Id nie ma w poleceniu):

INSERT INTO baza.TAB2 (COL2, COL3, COLn) SELECT COL2, COL3, COLn FROM baza.TAB1;

Będę wdzięczna za pomoc.
anka_skakanka
Posty: 4
Dołączył(a): 07.11.2017

Re: Rekordy widmo po wgraniu danych w bazie MySQL

Post 07.11.2017, 12:08:28

Ad.2. jeśli pomijasz w INSERT kolumnę ID, to nie powinno występować zachowanie, które opisujesz. na dowód http://sqlfiddle.com/#!9/0c56e5/3

Ad. 1. to zależy od wielu czynników. Czy ID które wstawiasz do tab 1 pochodzą z Excela czy pozwalasz mechanizmowi auto increment je definiować? Jeśli usuwasz dane z tej tabeli, to one nie resetują licznika AUTO_INCREMENT. Stąd też podejrzewam, że te ID pochodzą z pliku excela. Licznik się odpowiednio modyfikuje, gdy wstawisz rekord z ustawionym przez ciebie ID. I licznik nie idzie nigdy w dół, tylko w górę.
W każdym razie, jeśli pozwalasz mechanizmowi działać, to nie oczekuj, że zawsze będziesz mieć kolejne ID bez "dziur". Licznik może być zwiększony nawet przy niepoprawnym zapytaniu (tj. INSERT, który się nie powiedzie z powodu dowolnego błędu, czy to Twojego jako autora zapytania czy z powodu błędu systemu bazodanowego). Ale ciągłość ID nie powinna Cię w ogóle interesować, ważne jest, żeby rekordy miały unikalne ID. Jeśli wymagasz jednak kolejności, bo tego wymaga logika Twojej aplikacji, powinnać przemyśleć kwestię generowania ID ręcznie a nie przez auto increment.
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19645
Dołączył(a): 14.04.2002

Re: Rekordy widmo po wgraniu danych w bazie MySQL

Post 07.11.2017, 12:56:24

Dzięki Kuku za szybką odpowiedź.
Ad.2. Rzeczywiście masz rację.

Ad.1.
"W każdym razie, jeśli pozwalasz mechanizmowi działać, to nie oczekuj, że zawsze będziesz mieć kolejne ID bez "dziur". Licznik może być zwiększony nawet przy niepoprawnym zapytaniu (tj. INSERT, który się nie powiedzie z powodu dowolnego błędu, czy to Twojego jako autora zapytania czy z powodu błędu systemu bazodanowego). Ale ciągłość ID nie powinna Cię w ogóle interesować, ważne jest, żeby rekordy miały unikalne ID. Jeśli wymagasz jednak kolejności, bo tego wymaga logika Twojej aplikacji, powinnać przemyśleć kwestię generowania ID ręcznie a nie przez auto increment."

To wiele wyjaśnia. Na szczęście nie jest to wymóg aplikacji ale chęć zrozumienia logiki.

Jeszcze raz dziękuję!
anka_skakanka
Posty: 4
Dołączył(a): 07.11.2017


Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 gości

Hosting, Domeny, SSL

Subskrypcja

Mamy 50698 zarejestrowanych użytkowników.
Najnowszy użytkownik: m1kie


Nasi użytkownicy napisali:

  • 936100 wiadomości
  • w 246729 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)