Je souhaite ajouter une ligne à une table de base de données, mais si une ligne existe avec la même clé unique, je souhaite la mettre à jour.
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 souhaite mettre à jour cette ligne avec ces valeurs. Normalement, cela donne une erreur. Si j'utilise insert IGNORE
, l'erreur sera ignorée, mais elle ne sera toujours pas mise à jour.
Utilisez INSERT ... ON DUPLICATE KEY UPDATE
QUERY:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
Départ 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 l'insertion par 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;
J'espère que cela t'aides.
Lorsque vous utilisez SQLite:
REPLACE into table (id, name, age) values(1, "A", 19)
Pourvu que id
soit la clé primaire. Ou alors, il insère simplement une autre ligne. Voir INSERT (SQLite).
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);
INSERT INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE 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 en savoir plus sur ces déclarations visitez ce lien
Juste parce que je cherchais ici cette solution, mais pour la mise à jour à partir d'une autre table structurée de manière identique (dans mon cas, testez DB pour la base de données en direct):
INSERT live-db.table1
SELECT *
FROM test-db.table1 t
ON DUPLICATE KEY UPDATE
ColToUpdate1 = t.ColToUpdate1,
ColToUpdate2 = t.ColToUpdate2,
...
Comme mentionné précédemment, seules les colonnes que vous souhaitez mettre à jour doivent être incluses après ON DUPLICATE KEY UPDATE
.
Nul besoin de lister les colonnes dans INSERT
ou SELECT
, bien que je convienne que c'est probablement une meilleure pratique.
Au cas où vous souhaiteriez conserver l’ancien champ (par exemple: nom). La requête sera:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name=name, age=19;
Dans mon cas, j'ai créé ci-dessous des requêtes mais dans la première requête si id
1 existe déjà et si l'âge est déjà là, après cela, si vous créez une première requête sans age
, la valeur de age
sera nulle
REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19
pour éviter le problème ci-dessus créer une requête comme ci-dessous
INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19
que cela vous aide ...