이상한 단어가 짧은, ㅎ에 넣어.항목이없는 경우 생성하고 그렇지 않으면 업데이트 하시겠습니까?
어쨌든, 내가 원한 것은 기본적으로 테이블에있는 항목을 업데이트하는 것이고, 그렇지 않으면 동일한 데이터로 채우는 새 항목을 만드는 것입니다.
은 그게 쉽게 알아,하지만 나는 그것을 사용했습니다 얼마나 많은 측면에서 MySQL로 비교적 새로운 해요 : P
이상한 단어가 짧은, ㅎ에 넣어.항목이없는 경우 생성하고 그렇지 않으면 업데이트 하시겠습니까?
어쨌든, 내가 원한 것은 기본적으로 테이블에있는 항목을 업데이트하는 것이고, 그렇지 않으면 동일한 데이터로 채우는 새 항목을 만드는 것입니다.
은 그게 쉽게 알아,하지만 나는 그것을 사용했습니다 얼마나 많은 측면에서 MySQL로 비교적 새로운 해요 : P
는 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)
많은 개발자가 여전히 테이블에 필드가 있는지 확인한 다음 첫 번째 쿼리의 결과에 따라 삽입 또는 업데이트 쿼리를 실행하는 쿼리를 실행합니다. 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);
를 사용할 수 있습니다.
IMO,이 응답은 질문에 더 잘 응답합니다. REPLACE는 행이 이미있을 때 실제로 UPDATE를 원한다면 REPLACE는 파괴적입니다. "REPLACE는 INSERT와 정확히 똑같이 작동합니다. 단, 테이블의 이전 행이 PRIMARY KEY 또는 UNIQUE 인덱스의 새 행과 동일한 값을 가지면 새 행이 삽입되기 전에 이전 행이 삭제됩니다. " (MySQL 매뉴얼) – richardkmiller
+1 : 답변보다 훨씬 좋은 답변 – mathieu
정확히 "삽입 또는 업데이트"는 아니지만 "삽입 또는 삭제 + 삽입"이라는 점에 유의하십시오. 이는 업데이트 만하려는 경우 적절한 해결책이 아니라는 것을 의미합니다. 열의 일부 : 업데이트와 달리 지정된 값이없는 열의 값은 기본값으로 설정되며 손실됩니다. –
다른 사람들이 말했듯이 REPLACE
가야합니다. 실제로 테이블을 사용하면 DELETE
및 INSERT
이되므로주의해야합니다. 대부분 괜찮지 만, ON DELETE CASCADE
과 같은 제약 조건을 가진 외래 키가 있으면 큰 문제가 발생할 수 있습니다.
REPLACE INTO 사용자를 위해 엔트리 이상이 생성되었습니다. SET IP = '$ uip', lastcheck = '$ tim' – unrelativity
IS 기본 키 또는 고유 인덱스 중 하나를 IP로 확인하거나 마지막으로 확인 하시겠습니까? – carl
그러면 발생하는 동작이 예상됩니다. 이 필드가 작동하려면 하나의 필드가 기본 또는 고유해야합니다. 그렇지 않으면, MySQL은 중복을 방지하기 위해 어떻게 알 수 있습니까? 바꾸기에서 설정 한 테이블 (기본 키)에 user_id가 있어야하는 것처럼 보입니다. – carl