2009-03-30 4 views
23

이상한 단어가 짧은, ㅎ에 넣어.항목이없는 경우 생성하고 그렇지 않으면 업데이트 하시겠습니까?

어쨌든, 내가 원한 것은 기본적으로 테이블에있는 항목을 업데이트하는 것이고, 그렇지 않으면 동일한 데이터로 채우는 새 항목을 만드는 것입니다.

은 그게 쉽게 알아,하지만 나는 그것을 사용했습니다 얼마나 많은 측면에서 MySQL로 비교적 새로운 해요 : P

답변

22

사용 'INTO 교체'

REPLACE INTO table SET id = 42, foo = 'bar'; 

MySQL documentation

에서 더보기
+0

REPLACE INTO 사용자를 위해 엔트리 이상이 생성되었습니다. SET IP = '$ uip', lastcheck = '$ tim' – unrelativity

+0

IS 기본 키 또는 고유 인덱스 중 하나를 IP로 확인하거나 마지막으로 확인 하시겠습니까? – carl

+0

그러면 발생하는 동작이 예상됩니다. 이 필드가 작동하려면 하나의 필드가 기본 또는 고유해야합니다. 그렇지 않으면, MySQL은 중복을 방지하기 위해 어떻게 알 수 있습니까? 바꾸기에서 설정 한 테이블 (기본 키)에 user_id가 있어야하는 것처럼 보입니다. – carl

2

는 MySQL의 설명서에 REPLACE을 검색합니다.

테이블 에있는 오래 된 행은 PRIMARY KEY 또는 UNIQUE 인덱스에 대한 새 행 값이 같다면, 이전 행이 새로운 전에 삭제 된 것을 제외하고, 정확하게 INSERT 같은 을 작품을 교체 행은 입니다. 12.2.5 절. "INSERT 구문"을 참조하십시오.

REPLACE는 SQL 표준에 대한 MySQL 확장입니다. 삽입하거나 삭제 및 삽입합니다. 또 다른 MySQL 을 표준 SQL로 확장하려면 - 삽입 또는 업데이트 - Section 12.2.5.3, "INSERT ... ON DUPLICATE KEY UPDATE 구문"을 참조하십시오. 다음 INSERT 쿼리가있는 경우

:

INSERT INTO table (id, field1, field2) VALUES (1, 23, 24) 

을 이렇게 REPLACE 쿼리는 실행해야한다 :

REPLACE INTO table (id, field1, field2) VALUES (1, 23, 24) 
58

많은 개발자가 여전히 테이블에 필드가 있는지 확인한 다음 첫 번째 쿼리의 결과에 따라 삽입 또는 업데이트 쿼리를 실행하는 쿼리를 실행합니다. ON DUPLICATE KEY 구문을 사용해보십시오.이 방법은 훨씬 빠르고 빠르며 2 개의 쿼리를 실행하는 것입니다.자세한 정보는 표 INTO here

INSERT를 찾을 수있다 (A, B, C) VALUES DUPLICATE KEY UPDATE C를 ON (4,5,6) = 9 ;

당신은 당신이 테이블에 같은 값으로

INSERT를 업데이 트를 할 수있는 C의 같은 값 (A, B, C) 가치 (4,5,6) 을 유지하려는 경우 DUPLICATE KEY UPDATE에서 c = 6;

'중복 키에' '대체'과의 차이 : 삽입 또는 삭제와 중복 키에

를 삽입 :

교체 삽입 또는 업데이트

테이블에 기본 키 또는 고유 키가 없으면 바꾸기가 의미가 없습니다.

VALUES 기능을 사용하여 실제 값을 두 번 지정하지 않아도됩니다. 예 : VALUES(c)이 prevously (6) 지정된 값으로 평가한다 어디 대신

INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=6;

당신은

INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);

를 사용할 수 있습니다.

+4

IMO,이 응답은 질문에 더 잘 응답합니다. REPLACE는 행이 이미있을 때 실제로 UPDATE를 원한다면 REPLACE는 파괴적입니다. "REPLACE는 INSERT와 정확히 똑같이 작동합니다. 단, 테이블의 이전 행이 PRIMARY KEY 또는 UNIQUE 인덱스의 새 행과 동일한 값을 가지면 새 행이 삽입되기 전에 이전 행이 삭제됩니다. " (MySQL 매뉴얼) – richardkmiller

+3

+1 : 답변보다 훨씬 좋은 답변 – mathieu

+0

정확히 "삽입 또는 업데이트"는 아니지만 "삽입 또는 삭제 + 삽입"이라는 점에 유의하십시오. 이는 업데이트 만하려는 경우 적절한 해결책이 아니라는 것을 의미합니다. 열의 일부 : 업데이트와 달리 지정된 값이없는 열의 값은 기본값으로 설정되며 손실됩니다. –

8

다른 사람들이 말했듯이 REPLACE 가야합니다. 실제로 테이블을 사용하면 DELETEINSERT이되므로주의해야합니다. 대부분 괜찮지 만, ON DELETE CASCADE과 같은 제약 조건을 가진 외래 키가 있으면 큰 문제가 발생할 수 있습니다.

관련 문제