2017-12-27 13 views
1

MYSQL에서 INSERT ... ON DUPLICATE KEY UPDATE 구문을 알고 있지만 대신 다른 것을 삽입 할 수있는 방법이 있습니까? 보다 구체적으로, 내가 가진 말 :MYSQL ON DUPLICATE KEY 다른 것을 삽입하십시오

INSERT INTO main (a,b,c,d,e) VALUES ('$a','$b','$c','$d','$e'); 
열이 "a"는 고유하며 내가 그들의 데이터를 검색하기 위해 클라이언트 이메일로 전송 링크에서 공용 쿼리 문자열로 사용할 임의의 10 자리 영숫자 문자열을 포함

DB에서. 가능성은 62^10 가지 가능성이있는 것과 똑같은 문자열을 생성 할 가능성이 희박하지만 이미 존재하는 10 자리 문자열이 $a에 있다고 생각합니다. 내가 백업으로 $a2에 두 번째 문자열을 생성하고 지금은 $a2을 사용하는 경우 $a 경우 위의 삽입 진술을 수정하고 싶습니다. 이상적으로 다음과 같은 것을 찾고 있습니다.

INSERT INTO main (a,b,c,d,e) VALUES ('$a','$b','$c','$d','$e') ON DUPLICATE KEY USE $a2 INSTEAD OF $a; 

어떻게 할 수 있습니까? 내가 아는 한 ON DUPLICATE KEY INSERT something else 구문은 존재하지 않습니다. 또한 내 항목 목록은 약 20-25 자의 키 - 값 쌍으로되어 있으므로 전체 키 - 값 쌍 목록을 다시 작성하지 않고 다른 "a"만 삽입하는 무언가를 찾고 있습니다. 감사합니다. .

답변

0

당신은 할 것 :

INSERT INTO main (a, b, c, d, e) 
    VALUES ('$a', '$b', '$c', '$d', '$e') 
    ON DUPLICATE KEY UPDATE a = $a2; 

편집 : 새 행을 추가하려면

, 당신은 할 수 있습니다 :

INSERT INTO main (a, b, c, d, e) 
    SELECT (CASE WHEN EXISTS (SELECT 1 FROM main m WHERE x.a = m.a) 
       THEN $a2 ELSE x.a 
      END) as a, 
      b, c, d, e 
    FROM (SELECT '$a' as a, '$b' as b, '$c' as c, '$d' as d, '$e' as e) x; 
+0

그러나 기존 항목의 'a'열을 단순히 업데이트하는 것이 아닙니까? 고유 한 'a'로 완전히 새로운 항목을 삽입해야합니다. – Oliver

+0

@Oliver. . . 명확하게 해 주셔서 감사합니다. –

+0

와우 그게 복잡해. 죄송합니다.이 구문을 이해하지 못합니다. 일부 키워드가 누락되지 않았습니까? 예를 들어,'SELECT 1 FROM main m'은 의미가없는 것 같습니다 (아마'as' 아마도?)'x'와 같습니다. 마지막 줄은 무엇을합니까? 'FROM (SELECT ...'?) 변수를 열 이름으로 정의 하시겠습니까? 내 알지 못해 죄송합니다., – Oliver

0

또한 INTO 교체 사용할 수 있습니다. 이렇게하면 테이블의 기본 키가 다른 행과 일치하면 이전 데이터가 대체되고 다른 행이 새로운 행으로 삽입됩니다.

+0

죄송 합니다만 기존 항목을 대체합니다. 새로운 항목을 삽입해야하며 "a"열은 고유해야합니다. – Oliver