Jawaban:
Sejauh yang saya tahu, kedua sintaksinya sama. Yang pertama adalah standar SQL, yang kedua adalah ekstensi MySQL.
Jadi mereka harus setara dengan kinerja bijaksana.
http://dev.mysql.com/doc/refman/5.6/en/insert.html mengatakan:
INSERT menyisipkan baris baru ke dalam tabel yang ada. INSERT ... VALUES and INSERT ... SET bentuk form baris pernyataan pernyataan berdasarkan nilai yang ditentukan secara eksplisit. INSERT ... SELECT form menyisipkan baris yang dipilih dari tabel atau tabel lain.
INSERT INTO table SET
? Apakah ini mungkin?
Saya pikir ekstensi ini dimaksudkan untuk memungkinkan sintaksis yang sama untuk memasukkan dan memperbarui. Di Oracle, trik sintaksis yang serupa adalah:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...
dan INSERT ... VALUES ...
. Untuk fitur Anda memiliki kode yang lebih pendek, lebih cepat untuk menulis, peningkatan keterbacaan, dan penghapusan kesalahan ketik yang disebabkan oleh pencampuran urutan kolom Anda saat menulis VALUES
klausa Anda . Perasaan saya memberi tahu saya bahwa di internet kebaikan melebihi kejahatan, tetapi penilaian Anda mungkin berbeda.
Karena sintaksinya sama (dalam MySQL bagaimanapun), saya lebih suka INSERT INTO table SET x=1, y=2
sintaksisnya, karena lebih mudah untuk memodifikasi dan lebih mudah untuk menangkap kesalahan dalam pernyataan, terutama ketika memasukkan banyak kolom. Jika Anda harus memasukkan 10 atau 15 kolom atau lebih, sangat mudah untuk mencampur sesuatu menggunakan (x, y) VALUES (1,2)
sintaks, menurut saya.
Jika portabilitas antara standar SQL yang berbeda adalah masalah, maka mungkin INSERT INTO table (x, y) VALUES (1,2)
akan lebih disukai.
Dan jika Anda ingin menyisipkan banyak rekaman dalam satu permintaan, sepertinya tidak ada INSERT INTO ... SET
sintaks tidak akan berfungsi, sedangkan yang lain akan. Namun dalam kebanyakan kasus praktis, Anda mengulangi serangkaian catatan untuk melakukan sisipan, meskipun mungkin ada beberapa kasus di mana mungkin membangun satu kueri besar untuk menyisipkan sekelompok baris ke tabel dalam satu kueri, vs. kueri untuk setiap baris, mungkin memiliki peningkatan kinerja. Benar-benar tidak tahu.
INSERT INTO table SET
tidak standar. Tampaknya jauh lebih jelas. Saya kira saya tetap harus menggunakanINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
sintaks untuk menyelamatkan diri dari masalah jika saya porting ke Postgres.