2011-03-15 5 views
3
create table test1 ( 
    id int not null auto_increment primary key, 
    a varchar(16), b varchar(16) 
); 


INSERT INTO test1 (a,b) VALUES ('a1','b3') ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), b='3'; 

위의 줄은 테이블이 비어 있기 때문에 항목을 삽입해야합니다. Mysql last_insert_id가 작동하지 않는 중복 키에 삽입

INSERT INTO test1 (a,b) VALUES ('a1','b3') ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), b='3'; 

은 이미 존재 "3" a1, b3 이후로 b를 교체해야, 다시 라인을 실행합니다. 그러나 mysql은 나를 위해 또 다른 라인을 추가한다. 나는 잠시 수색했으며 해결책을 찾을 수 없습니다.

최신 업데이트 : 모든 도움에 감사드립니다. 나는 그 열 중 하나가 유일해야한다고 생각했다.

변경 테이블 테스트 1 고유 (a)

이 문제를 해결합니다.

답변

1

ON DUPLICATE은 열이 UNIQUE KEY 인 경우에만 트리거됩니다. a 또는 b 열의 테이블에 고유 인덱스를 추가하면 정상적으로 작동합니다.

+0

id는 기본 키입니다. 고유 한 색인으로 간주됩니까? 감사합니다 – user661192

+0

기본 키는 고유 인덱스의 특별한 경우입니다. 그렇습니다. 그러나 INSERT가 기본 키의 중복 값을 생성하지 않으므로 update 절은 사용되지 않습니다. – Konerak

1

사례에 중복 키가 없습니다. 테이블에서만 고유 한 열은 primary key id

두 번

INSERT INTO test1 (id,a,b) VALUES (1,'a1','b3') ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), b='3'; 

을 시도합니다. 설명서의 첫 번째 줄에 나와 있습니다.

If you specify ON DUPLICATE KEY UPDATE, and a row is inserted that would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row is performed. 

전체 내용은 documentation을 참조하십시오.

+0

test1 (id, a, b)를 사용하면 id = 1 만 업데이트됩니까? 열 "a"를 null로 설정하려고 시도했지만 삽입 결과가 동일하지 않습니다. 또한 id는 자동 증가이므로 기본 키로 설정해야합니다. 열을 기본 열로 사용할 수 없습니다. 덕분에 . – user661192

+0

나는 너에게 무슨 말을하지 않았다. 요점은 기본 키 또는 고유 인덱스에서만 사용할 수 있다는 것입니다. – Zimbabao

+0

혼란을 드려 죄송합니다. "id"는 제 경우의 기본 키입니다. 그러나, INSERT INTO test1 (id, a, b) VALUES (1, 'a1', 'b3') ON 중복 키 업데이트 ID = LAST_INSERT_ID (id), b = '3'; 은 id = 1 인 경우에만 항목을 변경합니다. ID를 모르는 경우 데이터를 업데이트 할 수 없습니다. 감사합니다. . – user661192

관련 문제