[mysql] 존재하지 않는 경우 MySql 테이블 삽입 그렇지 않으면 업데이트

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 UPDATEMySQL에 적절한 구문을 사용하여 다시 작성된 업데이트입니다 .

INSERT INTO AggregatedData (datenum,Timestamp)
VALUES ("734152.979166667","2010-01-14 23:30:00.000")
ON DUPLICATE KEY UPDATE
  Timestamp=VALUES(Timestamp)


답변

이것을 사용해보십시오 :

을 지정 하고 이전 행 ON DUPLICATE KEY UPDATEUNIQUE index orPRIMARY 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의 값 입력으로 사용합니다.


답변