UPDATE AggregatedData SET datenum="734152.979166667",
Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";
datenum
が存在する場合は機能しますが、datenum
が存在しない場合、このデータを新しい行として挿入します。
更新
datenumは一意ですが、それは主キーではありません
JaiはINSERT ... ON DUPLICATE KEY UPDATE
を使用する必要があることは正しいです。
Datenumは一意のキーであるため、updatenumにdatenumを含める必要がないため、変更しないでください。テーブルの他のすべての列を含める必要があります。 VALUES()
関数を使用して、他の列を更新するときに適切な値が使用されるようにすることができます。
MySQL用の適切なINSERT ... ON DUPLICATE KEY UPDATE
構文を使用して書き換えられた更新は次のとおりです。
INSERT INTO AggregatedData (datenum,Timestamp)
VALUES ("734152.979166667","2010-01-14 23:30:00.000")
ON DUPLICATE KEY UPDATE
Timestamp=VALUES(Timestamp)
this を使用してみてください:
ON DUPLICATE KEY UPDATE
を指定し、UNIQUE index or
PRIMARY KEY, MySQL performs an [
UPDATE`]( http://dev.mysql.com/docの値が重複する行が挿入された場合/refman/5.7/en/update.html )古い行の...
ON DUPLICATE KEY UPDATE
句には、カンマで区切られた複数の列の割り当てを含めることができます。
ON DUPLICATE KEY UPDATE
の場合、行ごとの影響を受ける行の値は、行が新しい行として挿入される場合は1、既存の行が更新される場合は2、既存の行が現在の値に設定される場合は0です。CLIENT_FOUND_ROWS
フラグをmysql_real_connect()
に指定する場合 mysqld に接続する場合、影響を受ける行の値は1です(0ではない)既存の行が現在の値に設定されている場合...
UNIQUE制約を設定できない2つのフィールド(両方の外部キー)に従ってテーブルを更新または挿入する必要がある状況がありました(したがって、INSERT ... ON DUPLICATE KEY UPDATEは機能しません)。私が最終的に使用したものは次のとおりです。
replace into last_recogs (id, hasher_id, hash_id, last_recog)
select l.* from
(select id, hasher_id, hash_id, [new_value] from last_recogs
where hasher_id in (select id from hashers where name=[hasher_name])
and hash_id in (select id from hashes where name=[hash_name])
union
select 0, m.id, h.id, [new_value]
from hashers m cross join hashes h
where m.name=[hasher_name]
and h.name=[hash_name]) l
limit 1;
この例は、入力パラメーター(2つの名前と数字)を[hasher_name]、[hash_name]、および[new_value]に置き換えて、私のデータベースの1つから引用しています。ネストされたSELECT ... LIMIT 1は、既存のレコードまたは新しいレコードのいずれか(last_recogs.idは自動インクリメントの主キー)の最初を取得し、それをREPLACE INTOへの値入力として使用します。