INSERT vs INSERT INTO


91

Bir süredir MS SQL'de T-SQL ile çalışıyorum ve bir şekilde bir tabloya veri eklemem gerektiğinde sözdizimi kullanmaya meyilliyim:

INSERT INTO myTable <something here>

Anahtar kelimenin INTOburada isteğe bağlı olduğunu anlıyorum ve onu kullanmak zorunda değilim ama bir şekilde benim durumumda alışkanlık haline geldi.

Sorum şu:

  • INSERTSözdizimi kullanmanın herhangi bir etkisi var INSERT INTOmı?
  • Hangisi standarda tam olarak uyuyor?
  • Her ikisi de SQL standardının diğer uygulamalarında geçerli mi?

Yanıtlar:


96

INSERT INTOstandarttır. INTOÇoğu uygulamada isteğe bağlı olsa da , birkaç uygulamada gereklidir, bu nedenle kodunuzun taşınabilir olmasını sağlamak için onu dahil etmek iyi bir fikirdir.

SQL standardının çeşitli sürümlerinin bağlantılarını burada bulabilirsiniz . Burada daha eski bir standardın HTML sürümünü buldum .


2
"SQL-99 Tamamlandı, Gerçekten" kitabı Sybase'in (ve dolayısıyla MS SQL Sunucusunun) INTO'nun isteğe bağlı olmasına izin vererek standart olmayan bir şekilde davrandığını söylüyor. Diğer veritabanı markaları anahtar kelimeyi gerektirir.
Bill Karwin

2
Sağ. Her zaman INTO kullanıyorsanız, hangilerinin bunu isteğe bağlı olduğunu hatırlamanıza gerek yoktur. Tüm uygulamalar kullanılmasına izin verir.
Bill the Lizard

22

Bunlar aynı şeydir, INTOT-SQL'de tamamen isteğe bağlıdır (diğer SQL lehçeleri farklı olabilir).

Diğer cevapların aksine, okunabilirliği bozduğunu düşünüyorum INTO.

Bunun kavramsal bir şey olduğunu düşünüyorum: Benim algıma göre, "Müşteri" adlı bir tabloya satır eklemiyorum , ancak bir Müşteri ekliyorum . (Bu, tablolarımı çoğul değil tekil olarak adlandırmak için kullandığım gerçeğiyle bağlantılıdır).

İlk konsepti takip ederseniz, INSERT INTO Customer büyük olasılıkla sizin için "doğru" hisseder misiniz?

İkinci kavramı izlerseniz, büyük olasılıkla INSERT Customersizin için olur.


5
Yaklaşımınızın riski, yeni programcıları nesneleri tablolarla karıştırmaya yönlendirebilmenizdir.
Dave DuPlantis

12
Cevabınız gerçeklere göre doğru. İnsanların karşıt görüşlere karşı oy kullanması utanç verici. Bence SO'nun faydalarından biri, bu farklı fikirleri duymaktır.
DOK

Nesnelerde ve tablolarda düşünme meselesi değil. Bir varlık ilişkisel modeli olarak kavramsal bir şekilde düşünmektir.
Andre Figueiredo

@DaveDuPlantis Ah, Jackie Treehorn yanlışlığı. 1
Ruffin

10

MySQL'de isteğe bağlı olabilir, ancak diğer bazı DBMS'lerde, örneğin Oracle'da zorunludur. Dolayısıyla SQL, değeri ne olursa olsun, INTO anahtar sözcüğüyle potansiyel olarak daha taşınabilir olacaktır.


4

Bu konuda eğildiğim bir ders, her zaman tutarlı tutmanız gerektiğidir! INSERT INTO kullanıyorsanız, INSERT de kullanmayın. Bunu yapmazsanız, bazı programcılar aynı soruyu tekrar sorabilir.

İşte başka bir ilgili örnek durumum: MS SQL 2005'te çok çok uzun bir saklı yordamı güncelleme şansım oldu. Sorun, sonuç tablosuna çok fazla verinin eklenmiş olmasıdır. Verilerin nereden geldiğini bulmalıydım. Yeni kayıtların nereye eklendiğini bulmaya çalıştım. SP'nin başlangıç ​​bölümünde, birkaç INSERT INTO gördüm. Sonra "INSERT INTO" bulmaya çalıştım ve onları güncelledim, ancak sadece "INSERT" in kullanıldığı bir yeri kaçırdım. Bu aslında bazı sütunlara 4k + satır boş veri ekledi! Tabii ki, INSERT'i aramalıyım. Ancak bu benim başıma geldi. Önceki programcı IDIOT'u suçluyorum :) :)


Görünüşe göre yazar onu INSERT INTO ile yaratmış ve bazıları bir bakıma INSERT koymuş. Maalesef "olması gerekenden" çok daha fazla oluyor.
Andre Figueiredo

3

SQL Server 2005'te, INSERT ve INTO arasında aşağıdaki gibi bir şey olabilir:

INSERT top (5) INTO tTable1 SELECT * FROM tTable2;

INTO olmadan çalışmasına rağmen, okunabilirlik için INTO kullanmayı tercih ediyorum.


1

İkisi de aynı şeyi yapıyor. INTO isteğe bağlıdır (SQL Server'ın T-SQL'inde) ancak okunabilirliğe yardımcı olur.


0

Ben kullanmayı tercih ederim. Aynı sözdizimi tarif hissini ve SQL dilinin gibi diğer bölgelerinde olduğu gibi okunabilirliği korur group BY, order BY.


0

ORACLE üzerinde SQL okumaya başladım, bu yüzden INTO olmadan kodu gördüğümde sadece 'bozuk' ve kafa karıştırıcı görünüyor.

Evet, bu sadece benim fikrim ve her zaman INTO kullanmanız gerektiğini söylemiyorum . Ancak, diğer birçok insanın muhtemelen aynı şeyi düşüneceğini bilmemelisiniz, özellikle de yeni uygulamalarla komut dosyası yazmaya başlamamışlarsa.

SQL ile bir TABLO'ya SATIR eklediğinizi ve nesnelerle çalışmadığınızı anlamanın da çok önemli olduğunu düşünüyorum. Yeni bir geliştirici için SQL tablo satırlarını / girişlerini nesne olarak düşünmenin yararsız olacağını düşünüyorum. Yine, sadece benim fikrim.


0

Varsa standart işlevi kullanın. Belirli veritabanınız için taşınabilirliğe ihtiyacınız olduğundan değil, ancak SQL bilginiz için taşınabilirliğe ihtiyacınız olma ihtimali vardır. Özel bir kötü T-SQL örneği isnull kullanımıdır, birleştirme kullanın!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.