2013-02-07 2 views
3
으로 변경됩니다.

내 웹 사이트에 mysql REPLACE INTO 구문을 사용하고 있습니다. mysql에서 id를 지정하면

REPLACE INTO table_name VALUES (3, 'Roni', 'India') 

지금 말하는이 쿼리의 MySQL의 실행을 영향을

2 행 (들) : 아래 내 테스트 테이블 구조,

id name address 
1 Tom US 
2 Dick UK 
3 Harry US 
4 Jony Spain 

쿼리입니다. 삽입 된 행 ID : 4 (쿼리 소요 0.0003 초)

위의 텍스트는 무엇을 의미합니까? Whay 2 행에 영향을 받음?

감사

+0

당신은

(, ...) VALUES (, INTO REPLACE 구문 이하로 사용하여 쿼리를 다시 작성할 수 있습니다 ...) – DevelopmentIsMyPassion

+0

Replace 쿼리를 사용할 때 출력되는 결과는 무엇입니까? – DevelopmentIsMyPassion

+0

REPLACE 문은 먼저 동일한 기본 키가있는 레코드를 삭제 한 다음 새 레코드를 삽입합니다. 이 함수는 삭제 된 레코드 수와 삽입 된 레코드 수를 반환합니다. –

답변

2

두 행은 삭제하고이 작업을 먼저 DELETE (1 행의 영향을) 끝낼 수 있도록 핵심적인 충돌에 INSERT 한 후 INSERT (2 다음을 할 것입니다 INTO 교체로 인해 영향을받는 영향을받은 행).

인덱스를 업데이트해야하므로 DELETE가 많은 비용이 드는 다른 솔루션을 고려하는 것이 좋습니다. 많은 경우 DUPLICATE KEY UPDATE 기반 쿼리에서 INSERT ...가 더 빠릅니다. 이 같은

+0

내 표의 'id'입력란은 자동 증분 입력란입니다. 검색어를 실행하면 id는 동일하게 유지됩니다. 3] ...하지만 당신에 따르면 먼저 삭제하고 새 행을 삽입합니다. 왜 자동 증가가 작동을 멈추게되었는지 말해 주시겠습니까? 인덱스를 업데이트해야하기 때문에 "DELETE가 비용이 많이 든다"라고 썼다면, 테이블의 전체 인덱스가 업데이트된다는 의미입니까? –

+0

id에 명시 적으로 값을 지정하기 때문에 자동으로 증가하지 않습니다. 특정 값을 지정하지 않으면 값이 자동 증가합니다. ID에 대한 값을 지정하는 동안 일반 오래된 삽입을 시도하면 (예 : INSERT INTO table_name (600, 'Roni', 'India')) 행이 삽입되고 다음 자동 증가 값은 601 – shannonman

+0

ok입니다. ... 고마워 ...이게 내 테이블에서 일어나는 일이야 .. 쿼리를 실행 한 후 id 3이 업데이트 된 필드와 새로운 행을 삽입 할 때 자동 증분 ID가 5가됩니다. 그래서 삭제와 다시 삽입 프로세스 [ie REPLACE]는 테이블 인덱스에 전혀 영향을 미치지 않습니다. 그래서 나는 놀랐고 그 질문을했다. 나의 가난한 영어를 유감스럽게 생각한다. –

0

를 사용하여 쿼리

EXPLAIN REPLACE INTO table_name VALUES (3, 'Roni', 'India') 

주의 "EXPLAIN"키워드를 추가! 이렇게하면 MySQL은 무슨 일이 일어나는지 설명 할 것입니다.

그러나 REPLACE INTO는 INSERT INTO와 같지만 존재하는 경우 해당 행을 대체하고 그렇지 않은 경우 삽입합니다. 따라서, 존재하면 행을 지우고 새로운 행을 삽입하므로 영향을받는 행이 두 개 있습니다. 다음과 같이

+0

설명은이 쿼리로 작동하지 않습니다. .. 그것은 SQL 오류를주고있다 –

+0

무엇이 오류입니까? – Siki

+0

여기 있습니다, ** # 1064 - SQL 구문에 오류가 있습니다. 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 'REPLACE INTO table_name VALUES (3,'Roni ','India ')'1 번 라인 근처에서 사용하십시오 ** –

1

MySQL은 UPDATE 문처럼 REPLACE : 귀하의 경우

REPLACE INTO table_name SET column_name1 = value1 AND column2 = value2 
0

를가 더 3 삭제 후 다시 삽입 없었다 좋아하는 ID를 찾습니다. 그래서 2 개의 레코드가 영향을 받았다고합니다. 테이블은 3 행이있을 수 있습니다, 로니과 인도의 삽입과 삭제 된 행 3, 해리, 미국

관련 문제