2009-05-14 4 views
195

INSERT INTO table VALUES ..INSERT INTO table SET의 주요 차이점은 무엇입니까?MySQL INSERT INTO 테이블 VALUE .. INSERT INTO 테이블 SET

예 :

INSERT INTO table (a, b, c) VALUES (1,2,3) 

INSERT INTO table SET a=1, b=2, c=3 

그리고 어떻게이 두 가지의 성능에 대한?

+9

Code Complete와 McConnell의 가독성에 대한 지속적인 강조를 읽은 후 'INSERT INTO table SET'이 표준이 아니란 것은 불행한 것 같습니다. 훨씬 더 명확 해 보인다. 나는 내가 INSERT INTO 테이블 ([column name, column name b]) VALUES ([ 'value a', 'value b']) 구문을 사용해야 만 할 것이다. Postgres에게. – cluelesscoder

+0

이 질문은 Kanye의 비디오처럼 바이러스에 감염되었습니다! – aMazing

답변

156

내가 알 수있는 한 두 구문은 동일합니다. 첫 번째는 SQL 표준이며 두 번째는 MySQL의 확장입니다.

따라서 성능이 현저히 동등해야합니다.

http://dev.mysql.com/doc/refman/5.6/en/insert.html는 말한다 :

INSERT 기존 테이블에 새 행을 삽입합니다. 명령문의 INSERT ... VALUES 및 INSERT ... SET 양식은 명시 적으로 지정된 값을 기반으로 행을 삽입합니다. INSERT ... SELECT 양식은 다른 테이블에서 선택된 행을 삽입합니다.

+3

'INSERT INTO table SET'을 사용하여 여러 값을 어떻게 INSERT합니까? 이것은 가능한가? – pixelfreak

+2

무엇을 의미합니까? OP가 가지고있는 예제는 SET a = 1, b = 2, c = 3으로 이해할 수 있습니다. –

+6

나는 여러 행을 INSERT했다. INSERT INTO 테이블 (a, b, c) VALUES (1,2,3), (4,5,6), (7,8,9); – pixelfreak

13

확장 기능은 삽입 및 업데이트를위한 유사한 구문을 허용하기위한 것입니다. 오라클에서 유사한 구문 트릭은 다음과 같습니다 구문 이후

UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual) 
+1

확장 기능으로 문제가 해결되는 것보다 더 많은 문제가 발생한다고 생각합니다. – Pacerier

+4

@ Pacerier 예를 들면? 내가 볼 수있는 유일한 문제는 이식성이다 (이것은 많은 문맥에서별로 중요하지 않다). 내가 뭔가 빠진거야? –

+1

@MarkAmery, 네가 그것을 보았을 때, 실질적인 이익은 없습니다. 단점은 ** 불필요한 시간 낭비입니다 **,이 스레드의 모든 존재가 내 요점을 증명합니다. – Pacerier

0

특히 때, 성명에서 오류를 잡기 위해 수정 쉽게 쉽게이기 때문에 내가의 INSERT INTO table SET x=1, y=2 구문을 선호 (어쨌든 MySQL의에서) 동일 많은 열을 삽입합니다. 10 개 또는 15 개 이상의 열을 삽입해야한다면, 내 생각에 (x, y) VALUES (1,2) 구문을 사용하여 어떤 것을 혼합하는 것은 정말 쉽습니다.

다른 SQL 표준 간의 이식성이 문제가되면 INSERT INTO table (x, y) VALUES (1,2)이 바람직합니다.

단일 쿼리에 여러 레코드를 삽입하려는 경우 INSERT INTO ... SET 구문이 작동하는 것처럼 보이지 않지만 다른 레코드는 작동합니다. 그러나 대부분의 실제적인 경우에는 레코드 세트를 통해 반복적으로 삽입을 수행합니다. 하나의 큰 쿼리를 작성하여 하나의 쿼리에서 테이블에 여러 행을 삽입하는 경우와 각 행마다 성능이 향상 될 수 있습니다. 정말로 모르겠다.

관련 문제