답변:
내가 알 수있는 한 두 구문은 동일합니다. 첫 번째는 SQL 표준이고 두 번째는 MySQL의 확장입니다.
따라서 그것들은 정확히 현명한 성능이어야합니다.
http://dev.mysql.com/doc/refman/5.6/en/insert.html 은 다음과 같이 말합니다.
INSERT는 기존 테이블에 새 행을 삽입합니다. 명령문의 INSERT ... VALUES 및 INSERT ... SET 양식은 명시 적으로 지정된 값을 기반으로 행을 삽입합니다. INSERT ... SELECT 양식은 다른 테이블에서 선택된 행을 삽입합니다.
INSERT INTO table SET?를 사용하여 여러 값을 어떻게 삽입 합니까? 이것도 가능합니까?
확장 기능은 삽입 및 업데이트에 비슷한 구문을 허용하기위한 것입니다. Oracle에서 유사한 구문 적 트릭은 다음과 같습니다.
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...와 INSERT ... VALUES .... 이 기능의 경우 코드 작성 시간이 짧고 작성 속도가 빠르고 가독성이 향상되며 VALUES절을 작성할 때 열 순서를 혼합하여 오타가 제거됩니다 . 내 직감은 그물에서 선이 선을 능가한다고 말하지만 판단이 다를 수 있습니다.
구문은 (어쨌든 MySQL에서는) 동일하기 때문에 구문을 선호합니다 INSERT INTO table SET x=1, y=2. 특히 많은 열을 삽입 할 때 명령문에서 수정하기 쉽고 오류를 잡기가 더 쉽기 때문입니다. 10 또는 15 개 이상의 열을 삽입 해야하는 경우 (x, y) VALUES (1,2)내 의견으로 는 구문 을 사용하여 무언가를 혼합하는 것이 정말 쉽습니다 .
다른 SQL 표준 간의 이식성이 문제인 INSERT INTO table (x, y) VALUES (1,2)경우 선호 될 수 있습니다.
단일 쿼리에 여러 레코드를 삽입하려는 경우 INSERT INTO ... SET구문이 작동 하는 것처럼 보이지만 다른 레코드 는 작동 하지 않습니다 . 그러나 대부분의 실제 경우에는 레코드 세트를 반복하여 삽입을 수행합니다.하지만 하나의 큰 쿼리를 구성하여 한 행의 테이블에 여러 행을 삽입하여 하나의 쿼리에 대한 쿼리를 생성하는 경우가 있습니다. 각 행의 성능이 향상 될 수 있습니다. 정말 몰라
INSERT INTO table SET는 표준이 아닌 것은 불행한 것 같습니다 . 훨씬 더 명확 해 보입니다.INSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])Postgres로 이식하면 문제를 피하기 위해 어쨌든 구문 을 사용해야 할 것 같습니다 .