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.
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
remplacer
http://dev.mysql.com/doc/refman/5.0/en/replace.html
REPLACE into table (id, name, age) values(1, "A", 19)
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),
...
essayez ceci:
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;
Espérons que cette aide.
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.
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
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.
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` )