web-dev-qa-db-ja.com

MySQLのINSERT INTOテーブルの値.. vs INSERT INTOテーブルのSET

INSERT INTO table VALUES ..INSERT INTO table SETの主な違いは何ですか?

例:

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

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

そして、この2つのパフォーマンスはどうですか?

235
Irmantas

私が言うことができる限り、両方の構文は同等です。 1つ目はSQL標準、2つ目はMySQLの拡張です。

したがって、それらはまったく同じパフォーマンスであるべきです。

http://dev.mysql.com/doc/refman/5.6/en/insert.html によると、

INSERTは既存のテーブルに新しい行を挿入します。文のINSERT ... VALUESおよびINSERT ... SET形式は、明示的に指定された値に基づいて行を挿入します。 INSERT ... SELECTフォームは、他のテーブルから選択された行を挿入します。

183
Vinko Vrsalovic

私はこの拡張が挿入と更新のために同様の構文を許すことを意図していると思います。 Oracleでは、同様の構文上のトリックは次のとおりです。

UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
15
user69173

(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)が優先されます。

また、1つのクエリに複数のレコードを挿入する場合は、INSERT INTO ... SET構文が機能するようには見えませんが、もう1つは機能します。しかし、ほとんどの実用的なケースでは、とにかくレコードのセットをループ処理して挿入を実行します。行ごとに、パフォーマンスが向上する可能性があります。本当にわかりません。

3