Yanıtlar:
Anlayabildiğim kadarıyla, her iki sözdizimi de eşdeğerdir. Birincisi SQL standardı, ikincisi MySQL'in uzantısı.
Bu yüzden tam olarak eşdeğer performans açısından akıllı olmalıdırlar.
http://dev.mysql.com/doc/refman/5.6/en/insert.html diyor:
INSERT mevcut bir tabloya yeni satırlar ekler. İfadenin INSERT ... DEĞERLERİ ve INSERT ... SET formları, açıkça belirtilen değerlere göre satırlar ekler. INSERT ... SELECT formu, başka bir tablodan veya tablolardan seçilen satırları ekler.
INSERT INTO table SET
? Bu mümkün mü?
Uzantı ekler ve güncellemeler için benzer bir sözdizimine izin vermeyi amaçladığını düşünüyorum. Oracle'da benzer bir sözdizimsel hile:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...
ve INSERT ... VALUES ...
. Bu özellik için, daha kısa, daha hızlı yazma koduna, daha fazla okunabilirliğe ve VALUES
yan tümcenizi yazarken sütun sırasınızı karıştırmanın neden olduğu yazım hatalarının giderilmesine sahipsiniz . Bağırcım bana net olarak iyinin kötüye ağır bastığını söyler, ancak kararınız farklı olabilir.
INSERT INTO table SET x=1, y=2
Sözdizimleri eşdeğer olduğundan (yine de MySQL'de), sözdizimini tercih ediyorum , çünkü özellikle çok sayıda sütun eklerken ifadede değişiklik yapmak ve hataları yakalamak daha kolay. 10 veya 15 veya daha fazla sütun eklemeniz gerekiyorsa (x, y) VALUES (1,2)
, bence sözdizimini kullanarak bir şeyi karıştırmak gerçekten kolaydır .
Farklı SQL standartları arasındaki taşınabilirlik bir sorunsa, belki INSERT INTO table (x, y) VALUES (1,2)
de tercih edilir.
Ve tek bir sorguya birden çok kayıt eklemek istiyorsanız, INSERT INTO ... SET
sözdizimi işe yarayacak gibi görünürken, diğeri çalışacaktır. Ancak çoğu pratik durumda, ekler yapmak için bir dizi kayıt arasında dolaşıyorsunuz, ancak bir sorgudaki bir tabloya bir grup satır eklemek için bir büyük sorgu oluşturabileceğiniz bazı durumlar olabilir. her satırda bir performans artışı olabilir. Gerçekten bilmiyorum.
INSERT INTO table SET
standart olmayan talihsiz görünüyor . Çok daha net görünüyor.INSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
Postgres'e geçersem kendimi beladan kurtarmak için yine de sözdizimini kullanmalıyım sanırım .