Ekle (SQL) - Insert (SQL)

Bir SQL INSERT ifadesi herhangi bir tekil kayıt için bir veya daha fazla kayıt ekler masa içinde ilişkisel veritabanı.

Temel biçim

Ek ifadeler aşağıdaki biçime sahiptir:

TAKIN masa (sütun1 [, sütun2, sütun3 ...]) DEĞERLER (değer1 [, değer2, değer3 ... ])

Sütun ve değerlerin sayısı aynı olmalıdır. Bir sütun belirtilmezse, sütun için varsayılan değer kullanılır. Tarafından belirtilen (veya ima edilen) değerler INSERT ifade, geçerli tüm kısıtlamaları karşılamalıdır (örneğin birincil anahtarlar, KONTROL kısıtlamalar, ve GEÇERSİZ DEĞİL kısıtlamalar). Bir sözdizimi hatası oluşursa veya herhangi bir kısıtlama ihlal edilirse, yeni satır tabloya eklenmez ve bunun yerine bir hata döndürülür.

Misal:

INSERT INTO Telefon rehberi (isim, numara) DEĞERLER ('John Doe', '555-1212');

Tablo oluşturulurken sütunların sırasından yararlanılarak steno da kullanılabilir. Diğer sütunlar varsayılan değerlerini alacağı veya kalacağı için tablodaki tüm sütunların belirtilmesi gerekli değildir. boş:

TAKIN masa DEĞERLER (değer1, [değer2, ... ])

Phone_book tablosundaki 2 sütuna veri eklemek ve tablodaki ilk 2'den sonra olabilecek diğer sütunları yok saymak için örnek.

INSERT INTO Telefon rehberi DEĞERLER ('John Doe', '555-1212');

Gelişmiş formlar

Çoklu sıralı ekler

Bir SQL özelliği ( SQL-92 ) kullanımı satır değeri oluşturucuları tek bir SQL ifadesine aynı anda birden çok satır eklemek için:

INSERT INTO Tablo ismi (sütun-a, [sütun-b, ...])DEĞERLER ("değer-1a", ["değer-1b", ...]),       ("değer-2a", ["değer-2b", ...]),       ...

Bu özellik aşağıdakiler tarafından desteklenmektedir: DB2, SQL Server (10.0 sürümünden beri - yani 2008), PostgreSQL (8.2 sürümünden beri), MySQL, SQLite (3.7.11 sürümünden beri) ve H2.

Örnek ("isim" ve "numara" nın "telefon defteri" tablosundaki tek sütun olduğu varsayılarak):

INSERT INTO Telefon rehberi DEĞERLER ('John Doe', '555-1212'), ("Peter Doe", '555-2323');

bu iki cümle için bir kısaltma olarak görülebilir

INSERT INTO Telefon rehberi DEĞERLER ('John Doe', '555-1212');INSERT INTO Telefon rehberi DEĞERLER ("Peter Doe", '555-2323');

İki ayrı ifadenin farklı anlamlara sahip olabileceğini unutmayın (özellikle ifade ile ilgili olarak tetikler ) ve tek bir çok sıralı kesici uç ile aynı performansı sağlamayabilir.

MS SQL'de birden çok satır eklemek için böyle bir yapıyı kullanabilirsiniz:

INSERTINTOTelefon rehberiSEÇ'John Doe','555-1212'BİRLİKHERŞEYSEÇ"Peter Doe",'555-2323';

Bunun SQL standardına göre geçerli bir SQL ifadesi olmadığını unutmayın (SQL: 2003 ) eksik alt seçim maddesi nedeniyle.

Oracle'da aynısını yapmak için şunu kullanın: DUAL tablo, her zaman yalnızca tek bir satırdan oluşur:

INSERT INTO Telefon rehberiSEÇ 'John Doe', '555-1212' FROM ÇİFTBİRLİK HERŞEYSEÇ "Peter Doe",'555-2323' FROM ÇİFT

Bu mantığın standarda uygun bir uygulaması aşağıdaki örneği veya yukarıda gösterildiği gibi gösterir:

INSERT INTO Telefon rehberiSEÇ 'John Doe', '555-1212' FROM YANAL ( DEĞERLER (1) ) GİBİ t(c)BİRLİK HERŞEYSEÇ "Peter Doe",'555-2323' FROM YANAL ( DEĞERLER (1) ) GİBİ t(c)

Oracle PL / SQL, TÜMÜNÜ EKLE birden çok insert deyiminin bir SEÇ:[1]

INSERT HERŞEYINTO Telefon rehberi DEĞERLER ('John Doe', '555-1212')INTO Telefon rehberi DEĞERLER ("Peter Doe", '555-2323')SEÇ * FROM ÇİFT;

İçinde Firebird birden çok satır eklemek şu şekilde elde edilebilir:

INSERT INTO Telefon rehberi ("isim", "numara")SEÇ 'John Doe', '555-1212' FROM RDB $ VERİTABANIBİRLİK HERŞEYSEÇ "Peter Doe", '555-2323' FROM RDB $ VERİTABANI;

Bununla birlikte Firebird, tek bir sorguda kullanılabilecek bağlamların sayısında bir sınır olduğundan, bu şekilde eklenebilecek satır sayısını sınırlar.

Diğer tablolardan satır kopyalama

Bir INSERT deyimi, diğer tablolardan veri almak, gerekirse değiştirmek ve doğrudan tabloya eklemek için de kullanılabilir. Tüm bunlar, istemci uygulamasında herhangi bir aracı işlem içermeyen tek bir SQL deyiminde yapılır. Yerine bir alt seçim kullanılır DEĞERLER fıkra. Alt seçim birleşimleri, işlev çağrılarını içerebilir ve hatta verilerin eklendiği aynı tabloyu sorgulayabilir. Mantıksal olarak seçim, gerçek ekleme işlemi başlamadan önce değerlendirilir. Aşağıda bir örnek verilmiştir.

INSERT INTO phone_book2SEÇ *FROM   Telefon rehberiNEREDE  isim İÇİNDE ('John Doe', "Peter Doe")

Kaynak tablodaki verilerin bir kısmı yeni tabloya eklendiğinde, ancak kaydın tamamı eklenmediğinde bir varyasyon gereklidir. (Veya masaların şemalar aynı değiller.)

INSERT INTO phone_book2 ( [isim], [telefon numarası] )SEÇ [isim], [telefon numarası]FROM   Telefon rehberiNEREDE  isim İÇİNDE ('John Doe', "Peter Doe")

SEÇ deyimi (geçici) bir tablo oluşturur ve bu geçici tablonun şeması, verilerin eklendiği tablonun şemasıyla eşleşmelidir.

Varsayılan değerler

Tüm sütunlar için varsayılan değerler kullanılarak herhangi bir veri belirtmeden yeni bir satır eklemek mümkündür ancak Microsoft SQL Server gibi bazı veritabanları veri verilmediğinde ifadeyi reddeder ve bu durumda VARSAYILAN anahtar kelime kullanılabilir.

INSERT INTO Telefon rehberiDEĞERLER ( VARSAYILAN )

Bazen veritabanları bunun için alternatif sözdizimini de destekler; örneğin MySQL, VARSAYILAN anahtar kelime ve T-SQL kullanabilir VARSAYILAN DEĞERLER onun yerine DEĞERLER (VARSAYILAN).The VARSAYILAN anahtar kelime, o sütunun varsayılan değerini kullanarak bir sütunu açıkça doldurmak için normal eklemede de kullanılabilir:

INSERT INTO Telefon rehberi DEĞERLER ( VARSAYILAN, '555-1212' )

Bir sütun varsayılan bir değer belirtmediğinde ne olur veritabanına bağlıdır.Örneğin, MySQL ve SQLite boş bir değerle doldurur (katı mod dışında), diğer birçok veritabanı ise ifadeyi reddeder.

Anahtarın alınması

A kullanan veritabanı tasarımcıları Vekil anahtarı Her tablonun birincil anahtarı, veritabanı tarafından oluşturulan birincil anahtarı bir SQL'den otomatik olarak almaları gereken ara sıra senaryoya girecektir. INSERT diğer SQL ifadelerinde kullanım için ifade. Çoğu sistem SQL'e izin vermez INSERT satır verilerini döndüren ifadeler. Bu nedenle, bu tür senaryolarda bir geçici çözüm uygulamak gerekli hale gelir. Yaygın uygulamalar şunları içerir:

  • Veritabanına özgü bir kullanım saklı yordam vekil anahtarını oluşturan, INSERT işlem ve son olarak üretilen anahtarı döndürür. Örneğin, Microsoft SQL Server'da anahtar, SCOPE_IDENTITY () özel işlev, SQLite'da işlev adlandırılırken last_insert_rowid ().
  • Veritabanına özgü bir kullanım SEÇ son eklenen satır (lar) ı içeren geçici bir tablodaki ifade. DB2 bu özelliği şu şekilde uygular:
    SEÇ *FROM YENİ TABLO (    INSERT INTO Telefon rehberi    DEĞERLER ( "Peter Doe",'555-2323' )) GİBİ t
    • DB2 için z / OS bu özelliği aşağıdaki şekilde uygular.
      SEÇ EMPNO, HIRETYPE, KİRALAMAFROM SON TABLO (    INSERT INTO EMPSAMP (İSİM, MAAŞ, DEPTNO, SEVİYE)    DEĞERLER(Mary Smith, 35000.00, 11, Ortak));
  • Bir SEÇ sonra ifade INSERT En son eklenen satır için oluşturulan birincil anahtarı döndüren veritabanına özgü bir işleve sahip ifade. Örneğin, LAST_INSERT_ID () için MySQL.
  • Orijinal SQL'den benzersiz bir öğe kombinasyonu kullanma INSERT daha sonra SEÇ Beyan.
  • Bir GUID SQL'de INSERT ifadesi ve onu bir SEÇ Beyan.
  • Kullanmak ÇIKTI SQL'deki tümce INSERT MS-SQL Server 2005 ve MS-SQL Server 2008 için açıklama.
  • Bir INSERT ile ifade DÖNÜŞ fıkra Oracle.
    INSERT INTO Telefon rehberi DEĞERLER ( "Peter Doe",'555-2323' )DÖNÜŞ phone_book_id INTO v_pb_id
  • Bir INSERT ile ifade DÖNÜŞ fıkra PostgreSQL (8.2'den beri). Döndürülen liste bir sonucun aynısıdır INSERT.
    • Firebird Veri Değiştirme Dili deyimlerinde (DSQL) aynı sözdizimine sahiptir; ifade en fazla bir satır ekleyebilir.[2] Depolanan prosedürlerde, tetikleyicilerde ve yürütme bloklarında (PSQL) yukarıda bahsedilen Oracle sözdizimi kullanılır.[3]
      INSERT INTO Telefon rehberi DEĞERLER ( "Peter Doe",'555-2323' )DÖNÜŞ phone_book_id
  • Kullanmak KİMLİK() işlev H2 eklenen son kimliği döndürür.
    SEÇ KİMLİK();

Tetikleyiciler

Eğer tetikler hangi tablo üzerinde tanımlanır? INSERT ifadesi çalışır, bu tetikleyiciler işlem bağlamında değerlendirilir. EKLEMEDEN ÖNCE tetikler, tabloya eklenecek değerlerin değiştirilmesine izin verir. EKLE SONRA tetikleyiciler artık verileri değiştiremez, ancak diğer tablolarda, örneğin denetim mekanizmasını uygulamak için eylemler başlatmak için kullanılabilir.

Referanslar

  1. ^ "Oracle PL / SQL: TÜMÜNÜ EKLEYİN". psoug.org. Alındı 2010-09-02.
  2. ^ "Firebird 2.5 Dil Referans Güncellemesi". Alındı 2011-10-24.
  3. ^ "Firebird SQL Dil Sözlüğü".

Dış bağlantılar