2014-01-28 2 views
0

INSERT ... ON DUPLICATE KEY UPDATE을 알고 있지만 기존 행을 확인하는 데 사용하는 기준이 고유 또는 기본 키가 아니기 때문에 작동하지 않습니다 . 실제로, 그것은 2 개의 다른 분야 일 것이다. 고유 한 키가 아니기 때문에 값이 고유하지 않을 수도 있습니다.고유하지 않은 열을 기반으로 새 행을 삽입하십시오.

이, 새로운 행을 추가, 그렇지 않으면 업데이트

INSERT INTO 
    videos 
    (
     first_name, 
     last_name, 
     addresss, 
     plan 
    ) 
VALUES 
    (
     :first_name, 
     :last_name, 
     :addresss, 
     :plan 
    ) 

그래서 내가 행 이미 WHERE last_name = :last_name AND plan = :plan이 있는지 말하고 싶은 내 더미 삽입 문입니다.

여러 쿼리를 사용하여이 작업을 수행 할 수 있지만이 작업을 한 번 수행하고 앞뒤로 이동하지 않고도이 작업을 수행 할 수 있는지 알아보기 위해 노력하고 있습니다. 이 작업은 루프에서 수행되므로 다중 쿼리에서 수행해야하는 경우 아마도 쿼리 수가 두 배가됩니다.

create unique index videos_lastname_plan on videos(lastname, plan); 

문서가 명확하게 진술한다 :

+0

이 기사를 읽어 보시기 바랍니다 : http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql –

+4

는 고유 키는 제한되지 않는다 하나의 열 – Strawberry

답변

0

그냥 두 열에 고유 인덱스를 정의

중복 KEY UPDATE ON 지정하는 경우, 그리고 행 가 원인 것이라고 삽입 UNIQUE 인덱스 또는 PRIMARY KEY에 값이 중복되면, MySQL 은 이전 행의 UPDATE를 수행합니다.

그래서 두 개의 clumns에 대한 고유 색인은 완벽합니다. 문은 다음과 같습니다

INSERT INTO videos (first_name, last_name, addresss, plan) 
    VALUES (:first_name, :last_name, :addresss, :plan) 
    on duplicate key update address = VALUES(address), first_name = VALUES(first_name); 
+0

나는 그것을 지금 얻는다. 마지막 줄에는 계획 대신에 first_name이어야합니다, 맞습니까? 계획은 고유 색인의 일부이기 때문에 – zen

+0

@zen. . . 예. 처음 두 개가 고유 키라고 생각했습니다. 결정된. –

+0

ID에 대해 'PRIMARY' 열을 자동으로 증가 시키면 어떻게 될까요? 그래서 본질적으로 기본 AI와 우리가 만든 고유 지수. 'ON DUPLICATE KEY UPDATE '는 어떤 식 으로든 PRIMARY id에 의해 영향을받을 것인가? 그것의 자동 증분 이후 그것을 무시해야 가정 해요? – zen

관련 문제