Keresés

Új hozzászólás Aktív témák

  • Louloudaki

    aktív tag

    válasz emitter #502 üzenetére

    unsigned szám típusú mezőknél kell, ha biztos nem lesz negatív szám
    a current timestamp dátum típusú mezőknél az aktuális dátumot veszi alapból
    auto increment magától növeli a mező, pl id értékét minden új felvitelnél. de növelheted phpval is, kérdés mire jó, hogy lekérdezed az aktuális legnagyobb id-t, majd hozzáadsz egyet és úgy rögzíted az új adatokat, mikor ezt a db megcsinálja magától rövidebb idő alatt 1 lekérdezést spórolva.

    most ezt hogy érted, hogy több táblánál azonos az id mező? minden táblába kell egy primary key ami általában az id szokott lenni.

    cucka, hasznos volt a link, köszi én is ;)

    [ Szerkesztve ]

  • cucka

    addikt

    válasz emitter #502 üzenetére

    mező attribútumoknál be kell állítani valamit (unsigned; unsigned zerofill; on update current timestamp), vagy hagyjam üresen?
    Attól függ, mire akarod használni azt a mezőt. Az unsigned azt jelenti, hogy a mezőben található számnak nincs előjele (tehát midnig pozitív), az unsigned zerofill ugyanez, csak ott a mezőben található szám elé berak annyi 0-t, ami befér. Az on update current timestamp azt csinálja, hogy amikor kiadsz egy update-et a sorra, az adott mezőbe berakja az aktuális unix timestamp-et. Tehát pl. ha valamilyen hozzászólásnál/cikknél/stb. el akarod tárolni az utolsó módosítás időpontját, akkor arra jó.

    továbbá, ha van több táblám, amelyeknél az id mező azonos lesz, csak a legelső(nek nevezett) táblában legyen primary key, a többiben foreign-key; vagy mindegyikben prim.key?
    Az id mezőt a sorok egyszerű és gyors azonosítására használd. Ebből következik, hogy javaslom, mindegyik tábládnak legyen egy id mezője, amely primary key.
    Foreign key akkor jó, amikor két tábla közötti relációról van szó. Tehát pl. van egy személy táblád, benne egy id mező. Van egy hozzászólás táblád, amiben van egy személy_id meződ. Értelemszerűen a két tábla között kapcsolat van, amit az említett mezők valósítanak meg. Ilyenkor a személy_id mezőre kell a foreign key.

    És az auto_increment mire jó, hogyan működik?
    Az auto_increment az tulajdonképpen egy szekvenciát jelent. Kb. úgy képzeld el, mint egy változót az adatbázisodban, ami minden lekérdezésnél megnöveli 1-el az értékét.

    Főleg a táblák id mezőjénél használod. Beállítod az id mezőre, hogy primary key és auto_increment, ekkor minden egyes új sor beszúrásánál az id mező automatikusan egy értéket, ami szigorúan egyedi az adott mezőben és mindig nagyobb, mint az előzőleg beszúrásnál kapott érték. (Tehát az azonosítók szigorúan monoton növekvő sorozatot alkotnak)

    (#503) Louloudaki
    Az auto_increment php-ból történő szimulálása elsőre nagyon rossz ötletnek tűnik. A mysql által megvalósított auto_increment az atomi műveletnek számít, míg php-ból lekérdezni a legnagyobbat majd 1-et hozzáadni az nem atomi művelet.
    Ha egy időben jön két ilyen kérés a szerverre, akkor a mysql megoldása működik, a php-ból megvalósítottnál pedig előfordulhat, hogy két sor ugyanazt az azonosítót kapja. (Ami primary key-nél rögtön hibát is fog jelenteni)

    [ Szerkesztve ]

Új hozzászólás Aktív témák