3. Tabloya veri ekleme (insert)

1. INSERT IFADESININ KULLANIMI

Sqlde elimizde olan tablolara user interface ile veri ekleyebileceğimiz gibi kod yazarak da veri ekleyebiliriz. Bunu yaparken yine ingilizce tabanlı kodlardan faydalanacağız. SQL’de tabloya veri eklemek için kullanacağımız kod yapısı aşağıdaki gibi olacaktır.

Insert  into  TabloAdı (Kolonadi1,Kolonadi2,Kolonadi3...)  values (deger1,deger2,deger3..)

şeklindedir. Yukarıdaki şablonun muadili olarak

Insert  into  TabloAdı  values  (deger1,deger2,deger3..)

yapısı da kullanılabilir. İki kod da aynı sonucu verecek, verimizi tablomuza ekleyecektir ama görsellik açısından ilk yapı daha uygundur.

yukarıdaki yapıda Kayitlar adında bir tablomuz olduğunu ve buna veri eklemek istediğimizi varsayalım.

INSERT INTO Kayitlar (m_no,ad,soyad,tel,email,adres,sehir) VALUES (5, 'cagatay' , 'KIZILTAN' , 00000000000 , 'cgty_kzltn@hotmail.com' , 'istanbul' )

kodu yeterli olacaktir. Bu kodu çalıştırdığınızda (1 row(s) affected) yazisini göreceksiniz ki bu da verimiz tabloya eklendi anlamına gelmektedir.

INSERT INTO Kayitlar VALUES (5, 'cagatay' , 'KIZILTAN' , 00000000000 , 'cgty_kzltn@hotmail.com' , 'istanbul' )

yukaridaki yapı da bize birebir aynı sonucu verecektir.
Eğer biz kolonlardan birinin adını ve değerini kodumuzda yazmasaydık yani örneğin ad ve ‘cagatay’ verilerini kodumuzdan çıkarsaydık ;

INSERT INTO Kayitlar (m_no,soyad,tel,email,adres,sehir) VALUES (5, 'KIZILTAN' , 00000000000 , 'cgty_kzltn@hotmail.com' , 'istanbul' )

ad hücresi eğer NOT NULL şeklinde ayarlanmadıysa tabloya NULL olarak geçecekti.

Veri insert ederken göz önünde bulundurulması gereken noktalar

* Tablonun primary key’i var mı?    ->  Var ise onu insert koduna dahil etmiyoruz.
* Kolonların veri tipleri nelerdir?    ->   Insert ederken girmek istediğimiz veri tipiyle kolonun kabul edeceği veri tipi birbiriyle uyuşmalı.
* Kolonlar null değer alabiliyor mu?  ->   NOT NULL olarak ayarlanmış sutünlar insert komutuna eklenmek zorundadır.
* Tablonun bağlı olduğu başka bir tablo var mı ?  ->   Eğer varsa ve bu tablolar arasında ilişki varsa siz üst tabloda olmayan bir değeri foreing key değeri olarak giremezsiniz bu veri tutarlılığı açısından hatalıdır çünkü girdiğiniz değeri ilişkide olan tablonun key değerleriyle kıyaslar ve eşleyecek bir değer bulamaz hata alırsınız.

2. DEĞERLERİ BAŞKA TABLODAN ÇEKMEK

Biz tabloya eklenmesini istediğimiz verileri elle girebileceğimiz gibi başka bir tablodan da çekebiliriz.

Insert  into  TabloAdı  (Kolonadi1,Kolonadi2,Kolonadi3...)  select kolon1, kolon2, kolon3... from tablo2

şeklinde bir kullanımla başka bir tablodan kendi tablomuza veri çekebiliriz. Ancak bu kullanım çok fazla yaygın değildir çünkü çekeceğimiz tablonun kolonlarının veya veri tiplerinin bizim tablomuzla uyuşacağı kesin değildir. O zaman bu yapı nerede kullanılır? bu yapı tablo yedekleme işlemlerinde sıklıkla kullanılır.

Tablo yedeklemek için  yukarıdaki yapının çok daha basit bir varyasyonu mevcuttur.

Insert  into  TabloAdı  select * from CekilecekTabloAdı

bu komut veri cektiğimiz tablodaki tüm verileri diğer tabloya taşır ancak iki tabloda da ID varsa hata alırsınız. Bu hatayı çözebilmek için taşıma işlemi sırasında ID kolonundaki ID özelliğini taşıma işlemini yapana kadar kaldırmanız gereklidir. Taşımayı bitirdiğiniz zaman kolonlara tekrar ID özelliği atayabilirsiniz.

Insert  into  TabloAdı  select * from CekilecekTabloAdı where sehir=' izmir '

tablodaki sehir kaydi izmir olan verileri diğer tabloya geçir anlamına gelmektedir.

Şimdi yukarıdaki veri ve tablo yedekleme işlemlerinin uzun yolunu anlattığımıza göre artık en kısa ve konforlu yolunu anlatmanın vakti geldi. Bunun için select into .. komutumuz var.

select * into TabloAdi from CekilecekTabloAdı

işlem bu kadar basit Cekilecek tablodan tüm kayitlari ilk tabloya aktar.Bu işlemin en güzel özelliği verilerin taşınacağı yani  yedek tabloyu bizim oluşturmamız gerekmez eğer öyle bir tablo yoksa sql kendisi bunu yaratır. Aynı şekilde bu tabloyu da kısıtlamalarla yönetebiliriz.

select * into TabloAdi from CekilecekTabloAdı where sehir =  ' İzmir '

Sadece izmir kayitlarini taşı.