2010-10-30 4 views
3

Je suis un peu confus sur la façon de gérer la situation où vous mettez à jour une ligne dans sqlite si elle existe, ou insérez-le si ce n'est pas le cas. Il me semble voir une solution différente à chaque réponse à ce problème. Quel est le moyen le plus efficace ou le plus facile? EDIT: Je voulais dire sqlite, désoléInsérer ou mettre à jour la confusion

Répondre

0

SI EXISTS peut être utile ici, en vous mettant à jour si la condition renvoie true ou en insérant si false.

3

Pour SQLite:

CREATE TABLE foo (bar INTEGER UNIQUE, baz INTEGER) 
INSERT INTO foo (bar,baz) VALUES (1, 2) 

Cela devrait provoquer une IntegrityError: barre de colonne est pas unique:

INSERT INTO foo (bar,baz) VALUES (1,3) 

Mais avec SQLite vous pouvez upsert en faisant INSERT OR REPLACE:

INSERT OR REPLACE INTO foo (bar,baz) VALUES (1,3) 

Au lieu d'insérer ting une nouvelle ligne, depuis une ligne avec bar montent à 1 existe déjà, la valeur de baz est mis à jour 3.


Pour MySQL:

créer un index unique sur la table. Ensuite, utilisez

INSERT INTO table (...) values (...) ON DUPLICATE KEY UPDATE field = ... 

par exemple:

CREATE UNIQUE INDEX mytable_index ON mytable (field1,field2) 

INSERT INTO mytable (field1,field2,field3) values (val1,val2,val3) 
    ON DUPLICATE KEY UPDATE field3 = val3 

Cela exige que (champ1, champ2) paires matable unique. Ensuite, lorsque vous insérez, soit vous obtiendrez une nouvelle ligne, soit, si (val1, val2) existe déjà dans mytable, la valeur de field3 sera mise à jour.

+0

Rats, je voulais dire SQLite – Vortol

+0

J'aime le mot "UPSERT", ils devraient en faire une commande SQL standard. UPSERT INTO foo ... – CashCow

Questions connexes