Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: MySQL-kantaan lisääminen vain jos riviä ei ole jo olemassa

xxmss [12.08.2017 15:03:06]

#

Minulla on MySQL-kannassa seuraavanlainen taulu:

CREATE TABLE pisteet
(
  kilpailu_id INT(10) UNSIGNED NOT NULL
  , kayttaja_id INT(10) UNSIGNED NOT NULL
  , pistemaara INT(10) NOT NULL

  , PRIMARY KEY (kilpailu_id, kayttaja_id)

  , INDEX (kilpailu_id)
  , INDEX (kayttaja_id)
) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_swedish_ci;

Pitäisi pystyä lisäämään yhtäaikaisesti monta uutta riviä. Jos rivi on jo olemassa, se pitää ohittaa. Eli haluan lisätä vain ne rivit, joita kannasta ei vielä löydy. Kannassa olevat vanhat rivit eivät saa muokkautua vaan niiden tulee pysyä ennallaan.

Tuli mieleen kaksi tapaa tehdä tämä, mutta onkohan näissä mitään tolkkua ja mahtavatko edes toimia kunnolla, vai miten tämän voisi järkevimmin hoitaa?

Tapa 1)

INSERT IGNORE INTO pisteet (kilpailu_id, kayttaja_id, pistemaara)
VALUES (1, 2, 3)

Tapa 2)

INSERT INTO pisteet (kilpailu_id, kayttaja_id, pistemaara)
VALUES (1, 2, 3)
ON DUPLICATE KEY UPDATE kilpailu_id = kilpailu_id

Grez [12.08.2017 15:22:52]

#

No varmaankin ihan tuo ensimmäinen ja voit vaikka lisätä useita rivejä kerrallaan:

INSERT IGNORE INTO pisteet (kilpailu_id, kayttaja_id, pistemaara)
VALUES  (1,2,3),
    (4,5,6),
    (7,8,9);

Jälkimmäisen tyylinen olisi järkevä, jos haluaisit muokata kannassa olevat rivit vastaamaan uusia tietoja. Mutta kerroit, että niitä nimenomaan ei haluta muokata.

xxmss [12.08.2017 15:44:31]

#

Huomasin, että tapa 2:ssa oli IGNORE-sana liikaa. Nyt se on korjattu.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta