Tietojen päivitys MySQL?

Mitenkäs MySQL onnistuu, et päivitetään tietoja mikäli tietokannassa semmoinen on ellei niin lisätään uusi?

Pitääkös tehdä näin.
UPDATE ...... Jos epäonnistui niin sit INSERT ..... Eikö ole helpompaa tapaa?
7768
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

---

Äänestä
  • Käytät IF EXISTS jolla löydät olemassa olevat ja sitten UPDATE. Jos ei löydy niin sitten INSERT.

    Ei muuten ole mitenkään MySQL-kohtainen vaan sama juttu kaikilla SQL-kannoilla.

    Äänestä

  • ollenkaan kirjoitti:

    Käytät IF EXISTS jolla löydät olemassa olevat ja sitten UPDATE. Jos ei löydy niin sitten INSERT.

    Ei muuten ole mitenkään MySQL-kohtainen vaan sama juttu kaikilla SQL-kannoilla.

    Kerroppas miten?

    Yritin Googlettaa, mut löyty vain taulukoiden poistoa jotka ei sovi tähän tarkoitukseen.

    Löysin INSERT INTO wordcount (word,count) VALUES ('a_word',1) ON DUPLICATE KEY UPDATE count=count 1;

    Äänestä

  • Neratetst kirjoitti:

    Kerroppas miten?

    Yritin Googlettaa, mut löyty vain taulukoiden poistoa jotka ei sovi tähän tarkoitukseen.

    Löysin INSERT INTO wordcount (word,count) VALUES ('a_word',1) ON DUPLICATE KEY UPDATE count=count 1;

    http://mysql.com/doc/refman/5.0/en/insert-on-duplicate.html tuon siis löysin.

    Äänestä

  • Neratetst kirjoitti:

    Kerroppas miten?

    Yritin Googlettaa, mut löyty vain taulukoiden poistoa jotka ei sovi tähän tarkoitukseen.

    Löysin INSERT INTO wordcount (word,count) VALUES ('a_word',1) ON DUPLICATE KEY UPDATE count=count 1;

    >Kerroppas miten?

    Jos oletetaan että olet päivittämässä varaosataulua niin syntaksi menee jotenkin noin:

    if EXISTS (SELECT 1 FROM varaosat WHERE osa_ID=@haku)
    UPDATE varaosat ... WHERE osa_ID = @haku
    else
    INSERT varaosat...

    Äänestä

  • ollenkaan kirjoitti:

    >Kerroppas miten?

    Jos oletetaan että olet päivittämässä varaosataulua niin syntaksi menee jotenkin noin:

    if EXISTS (SELECT 1 FROM varaosat WHERE osa_ID=@haku)
    UPDATE varaosat ... WHERE osa_ID = @haku
    else
    INSERT varaosat...

    Ensiksi kiitoksia todella paljon testaan tuota illemmal.

    Itselläni on käytössä MySQL 5 joten alikyselyt ei ole ongelma, mutta MySQL 4 ne eivät toimi. Ilmeisesti tuo ei ole alikysely ja toimii MySQL 4?

    Kumpaa tapaa suosittelet tätä vai tuota minun löytämääni? Ja miksi.

    Äänestä

  • Neratetst kirjoitti:

    Ensiksi kiitoksia todella paljon testaan tuota illemmal.

    Itselläni on käytössä MySQL 5 joten alikyselyt ei ole ongelma, mutta MySQL 4 ne eivät toimi. Ilmeisesti tuo ei ole alikysely ja toimii MySQL 4?

    Kumpaa tapaa suosittelet tätä vai tuota minun löytämääni? Ja miksi.

    Itse olen käyttänyt ohjelmissani yksinkertaisissa kannoissa updaten sijaan käytäntöä delete -> insert.

    Tämähän tekee periaatteessa päivityksen, delete suoritetaan jos primary key on tiedossa. Näin ollen ei tarvitse tehdä update lle omaa toiminnallisuutta ollenkaan.

    Ongelmia tulee tietenkin jos on ko tauluun on paljon relaatioita pääavaimen kautta (jopa hajoavia / tuhoavia sellaisia), tai insert on hankalampi kuin update. Mutta jos insert on yksinkertainen ja relaatioita ei ole tai ne voidaan helposti korjata tämä on yksi tapa.

    Äänestä

Kommentoi aloitusta


Neratetst kirjoitti:

Mitenkäs MySQL onnistuu, et päivitetään tietoja mikäli tietokannassa semmoinen on ellei niin lisätään uusi?

Pitääkös tehdä näin.
UPDATE ...... Jos epäonnistui niin sit INSERT ..... Eikö ole helpompaa tapaa?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu