Insérer dans une table MySQL ou mettre à jour s'il existe

je veux ajouter une ligne à une table de base de données, mais si une ligne existe avec la même clé unique, je veux mettre à jour la ligne.

par exemple,

insert into table (id, name, age) values(1, "A", 19)

disons que la clé unique est id , et dans ma base de données il y a une ligne avec id = 1 . Dans ce cas, je veux mettre à jour cette rangée avec ces valeurs. Normalement, cela donne une erreur. Si j'utilise insert IGNORE il ignorera l'erreur, mais il ne mettra pas à jour.

705
demandé sur Peter Mortensen 2010-11-17 17:08:52

9 réponses

Utilisation INSERT ... ON DUPLICATE KEY UPDATE

REQUÊTE:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name="A", age=19
1328
répondu Donnie 2017-05-12 05:53:39

remplacer

http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE into table (id, name, age) values(1, "A", 19)
195
répondu Martin Schapendonk 2010-11-17 14:15:24

lorsque vous utilisez la notice de lot, utilisez la syntaxe suivante:

INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
    name = VALUES (name),
    ...
25
répondu Fabiano Souza 2017-01-27 12:51:30

essayez ceci:

INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;

Espérons que cette aide.

22
répondu Luis Reyes 2010-11-17 14:17:32

essayez ceci:

INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'

Note:

Ici, si id est la clé primaire, après la première insertion avec id='1' , chaque tentative d'insertion de id='1' mettra à jour le nom et l'âge et l'âge du nom précédent changera.

16
répondu Abu Mohammad Rasel 2014-08-27 08:05:15
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);

INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE UPDATE SET NAME = "A", AGE = 19;

REPLACE INTO table (id, name, age) VALUES(1, "A", 19);

toutes ces solutions fonctionneront en ce qui concerne votre question.

si vous voulez savoir dans les détails concernant cette déclaration visitez ce lien

8
répondu user2613580 2018-03-03 15:18:17

en utilisant SQLite:

REPLACE into table (id, name, age) values(1, "A", 19)

à condition que id soit la clé primaire. Ou alors il insère juste une autre rangée. Voir insérer (SQLite).

7
répondu Dawn Song 2017-01-08 13:08:52

juste parce que j'étais ici à la recherche de cette solution mais pour la mise à jour à partir d'une autre table à structure identique (dans mon cas site test DB to live DB):

INSERT  live-db.table1
SELECT  *
FROM    test-db.table1 t
ON DUPLICATE KEY UPDATE
        ColToUpdate1 = t.ColToUpdate1,
        ColToUpdate2 = t.ColToUpdate2,
        ...

comme mentionné ailleurs, seules les colonnes que vous voulez mettre à jour doivent être incluses après ON DUPLICATE KEY UPDATE .

pas besoin d'énumérer les colonnes dans le INSERT ou SELECT , bien que je convienne que c'est probablement une meilleure pratique.

6
répondu SteveCinq 2017-06-09 05:31:24
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;

N'oubliez pas non plus de vous préoccuper de la contrainte clé unique.

ALTER TABLE `table` ADD UNIQUE `unique_key` ( `id` ) 
-3
répondu Sudda 2014-12-12 11:21:54