UPDATE AggregatedData SET datenum="734152.979166667",
Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";
datenum
존재 하면 작동 하지만 datenum
존재하지 않으면 이 데이터를 새 행으로 삽입하고 싶습니다 .
최신 정보
datenum은 고유하지만 기본 키가 아닙니다.
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은 고유 키이므로 업데이트 절에 포함 할 필요가 없으므로 변경해서는 안됩니다. 테이블의 다른 모든 열을 포함해야합니다. VALUES()
함수를 사용하여 다른 열을 업데이트 할 때 적절한 값이 사용되는지 확인할 수 있습니다 .
다음은 INSERT ... ON DUPLICATE KEY UPDATE
MySQL에 적절한 구문을 사용하여 다시 작성된 업데이트입니다 .
INSERT INTO AggregatedData (datenum,Timestamp)
VALUES ("734152.979166667","2010-01-14 23:30:00.000")
ON DUPLICATE KEY UPDATE
Timestamp=VALUES(Timestamp)
UNIQUE
에 대한 제약 조건을 Timestamp
사용하여ALTER TABLE AggregatedData ADD UNIQUE (Timestamp)
이것을 사용해보십시오 :
을 지정 하고 이전 행
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입니다. mysqld에 연결할 때CLIENT_FOUND_ROWS
플래그를 지정하면 기존 행이 현재 값으로 설정된 경우 영향을받는 행 값은 1 (0이 아님)입니다.mysql_real_connect()
UNIQUE 제약 조건을 설정할 수없는 두 필드 (두 외래 키)에 따라 테이블을 업데이트하거나 삽입해야하는 상황이있었습니다 (따라서 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;
이 예제는 입력 매개 변수 (두 개의 이름과 숫자)가 [hasher_name], [hash_name] 및 [new_value]로 대체 된 제 데이터베이스 중 하나에서 작성되었습니다. 중첩 된 SELECT ... LIMIT 1은 기존 레코드 또는 새 레코드 중 첫 번째 레코드 (last_recogs.id는 자동 증가 기본 키임)를 가져 와서 REPLACE INTO의 값 입력으로 사용합니다.