UPDATE AggregatedData SET datenum="734152.979166667",
Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";
Cela fonctionne si le datenum
existe, mais je veux insérer ces données en tant que nouvelle ligne si le datenum
n'existe pas.
METTRE À JOUR
le datenum est unique mais ce n'est pas la clé primaire
Réponses:
Jai a raison de l'utiliser
INSERT ... ON DUPLICATE KEY UPDATE
.Notez que vous n'avez pas besoin d'inclure le datenum dans la clause de mise à jour car il s'agit de la clé unique, elle ne doit donc pas changer. Vous devez inclure toutes les autres colonnes de votre table. Vous pouvez utiliser la
VALUES()
fonction pour vous assurer que les valeurs appropriées sont utilisées lors de la mise à jour des autres colonnes.Voici votre mise à jour réécrite en utilisant la
INSERT ... ON DUPLICATE KEY UPDATE
syntaxe appropriée pour MySQL:la source
UNIQUE
contrainte pourTimestamp
en utilisantALTER TABLE AggregatedData ADD UNIQUE (Timestamp)
Essayez d'utiliser ceci :
la source
J'ai eu une situation où j'avais besoin de mettre à jour ou d'insérer sur une table selon deux champs (les deux clés étrangères) sur lesquelles je ne pouvais pas définir une contrainte UNIQUE (donc INSERT ... ON DUPLICATE KEY UPDATE ne fonctionnera pas). Voici ce que j'ai fini par utiliser:
Cet exemple est tiré d'une de mes bases de données, avec les paramètres d'entrée (deux noms et un nombre) remplacés par [hasher_name], [hash_name] et [new_value]. Le SELECT ... LIMIT 1 imbriqué extrait le premier de l'enregistrement existant ou d'un nouvel enregistrement (last_recogs.id est une clé primaire à auto-incrémentation) et l'utilise comme valeur d'entrée dans REPLACE INTO.
la source