Forum » Izdelava spletišč » MySQL problem
MySQL problem
Ma$terM|nd ::
Pozdrav
Problem je sledeč: V pod. bazo dodam uporabnika s pač nekimi podatki med katerimi je tudi ID. Označen je kot primarni ključ in ima nastavljeno auto_increment. Do sem vse štima. Vendar ko nekega določenega uporabnika izbrišem in potem dodam novega, le-temu ID šteje od takrat, ko je bil še izbrisani uporabnik v pod. bazo.
Primer
ko izbrišem uporabnika z ID recimo 3 in vstavim novega pa dobim
Še bolj smešno pa je če iz začetnega stanja brišem uporabnika z ID 2 ker potem dobim
Zdaj me pa zanima zakaj po brisanju in vstavljanju ne šteje od zadnjega trenutnega ID naprej, da bi bilo po vrsti, oziroma kaj moram nardit da bo tako?
Mislim/Upam da me razumete kaj bi rad
Problem je sledeč: V pod. bazo dodam uporabnika s pač nekimi podatki med katerimi je tudi ID. Označen je kot primarni ključ in ima nastavljeno auto_increment. Do sem vse štima. Vendar ko nekega določenega uporabnika izbrišem in potem dodam novega, le-temu ID šteje od takrat, ko je bil še izbrisani uporabnik v pod. bazo.
Primer
Zacetno stanje ID | user ========== 1 | ata 2 | mama 3 | bratec
ko izbrišem uporabnika z ID recimo 3 in vstavim novega pa dobim
ID | user ========== 1 | ata 2 | mama 4 | teta
Še bolj smešno pa je če iz začetnega stanja brišem uporabnika z ID 2 ker potem dobim
ID | user ========== 1 | ata 4 | stric 3 | bratec
Zdaj me pa zanima zakaj po brisanju in vstavljanju ne šteje od zadnjega trenutnega ID naprej, da bi bilo po vrsti, oziroma kaj moram nardit da bo tako?
Mislim/Upam da me razumete kaj bi rad
- spremenil: Ma$terM|nd ()
mn ::
Razumem kaj bi rad vendar pa je to kar se ti dogaja povsem pravilno. auto_increment v vseh bazah je zgolj števec in je vedno nastavljen na vrednost zadnja vrnjena vrednost + 1.
Drugi problem pa resis s ORDER BY ID. Brez ORDER BY namreč baza podatkov ne garantira nikakršnega vrstnega reda. Običajno sicer dobis rezultate v enakem vrstnem redu kot si jih vpisoval, vendar za to ni garancije.
Drugi problem pa resis s ORDER BY ID. Brez ORDER BY namreč baza podatkov ne garantira nikakršnega vrstnega reda. Običajno sicer dobis rezultate v enakem vrstnem redu kot si jih vpisoval, vendar za to ni garancije.
Gost ::
Rešitev je, da se sprijazniš. Imaš dve opciji:
- uporabiš v phpmyadminu ( Ko si v neki tabeli greš na Operations -> alter table order by) ali preko custom sql stavka (do prvega naslednjega inserta bo vse po vrsti)
- v svojih queryjih uporabljaš vedno order by itd.
- uporabiš v phpmyadminu ( Ko si v neki tabeli greš na Operations -> alter table order by) ali preko custom sql stavka (do prvega naslednjega inserta bo vse po vrsti)
- v svojih queryjih uporabljaš vedno order by itd.
Zgodovina sprememb…
- spremenil: Gost ()
KoMar- ::
Očitno ne razumeš smisla indexov... ker je namenoma tako, da je nek ID unikaten neki vrstici. Vse ostalo lahko ti programarično obdelaš v aplikaciji - v bazi pusti tako, kot je, ker je tako pravilno!
Ma$terM|nd ::
Ja sej me ne moti tak. Ampak lepše se vidi, pa čisto enostavno je za dojet vrstni red, kot pa če je pomešano. V bistvu je res vseeno kak ID je, dokler je unikaten. Sej tisti ki uporablja aplikacijo pa itak ne vidi razlike.
Hvala za odgovore
Hvala za odgovore
HardFu ::
alternativa je da uporabis GUIDje potem je vsak index unikaten ne samo v bazi ampak po celem svetu :)
http://codeable.io
Tody ::
Mastermine emm tale tvoj vrstni red bi te hitr pokopal. Kot prvo se sploh ne birše zadev iz baze, kot so uporabniki ampak se jih da kot neaktivni. Ker z ID-jem povezuješ razna dejanja, ki jih je uporabnik naredil.
Recimor v forumu, vsakemu uporabniku določiš ID in ta uporabnik piše prispevke,ki so seveda vezani na ta ID. Če iz tabele uporabniki zbrišeš tega človeka in na mesto njega daš nekoga drugega, bo leta vse te poste avtomatično privzel. Kar pa vrjetno ni tvoj cilj.
Kaj šele pri kakih bolj pomembnih aplikacijah.
Recimor v forumu, vsakemu uporabniku določiš ID in ta uporabnik piše prispevke,ki so seveda vezani na ta ID. Če iz tabele uporabniki zbrišeš tega človeka in na mesto njega daš nekoga drugega, bo leta vse te poste avtomatično privzel. Kar pa vrjetno ni tvoj cilj.
Kaj šele pri kakih bolj pomembnih aplikacijah.
HardFu ::
Tody, ne bo drzalo, ce je id primary key, potem se ta nikoli ne podvoji, tako da namesto enega uporabnika ne mores postavit drugega z istim idjem. Je pa res, da je soft delete velikokrat prisoten, torej da je polje 'deleted' ki se nastavi na 1 recimo in uporabnik je navidezno zbrisan.
http://codeable.io
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [SQL] primary key inkrementalno dodajanje (strani: 1 2 )Oddelek: Programiranje | 5487 (4677) | ejresnevem |
» | [SQL] teževa pri iskanju zapisovOddelek: Programiranje | 2116 (1706) | lopow |
» | [Sql] PoizvedbaOddelek: Programiranje | 1834 (1485) | ales85 |
» | Malce zahtevnejši SQL stavek včasih narobe SELECT-aOddelek: Izdelava spletišč | 2156 (1825) | Brilko |
» | SQL problemOddelek: Programiranje | 1535 (1372) | Bossek |