» »

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

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

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.

AndrejS ::

In kje je tu problem ?

Ma$terM|nd ::

Rad bi da je po vrsti

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.

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

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.

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

AndrejS ::

Če pa bi rad po vrsti pa itak uporabiš ORDER BY ID ... kot je nekdo napisal


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[SQL] primary key inkrementalno dodajanje (strani: 1 2 )

Oddelek: Programiranje
515385 (4575) ejresnevem
»

[SQL] teževa pri iskanju zapisov

Oddelek: Programiranje
102108 (1698) lopow
»

[Sql] Poizvedba

Oddelek: Programiranje
111818 (1469) ales85
»

Malce zahtevnejši SQL stavek včasih narobe SELECT-a

Oddelek: Izdelava spletišč
302142 (1811) Brilko
»

SQL problem

Oddelek: Programiranje
91523 (1360) Bossek

Več podobnih tem