6. Hafta Tabloya Veri Ekleme/Silme/Güncelleme Komutları BPR255 Veritabanı Yönetim Sistemleri-II Bu Derste Öğrenecekleriniz: 1- Tabloya Veri (Yeni Kayıt) Ekleme 2- Kayıt Silme 3- Kayıt Güncelleme Aşağıdaki tabloyu inceleyin. Yeni kayıt girme, var olan bir kaydı silme veya güncelleme işlemlerini bu tabloya göre yapacağız. CREATE TABLE ÖĞRENCİLER ( NUMARA INT ADI VARCHAR(25) SOYADI VARCHAR(25) BÖLÜM CHAR(4) TELEFON CİNSİYET MEMLEKET CHAR(16) VARCHAR(5) VARCHAR(20) PRIMARY KEY REFERENCES BÖLÜMLER([BÖLÜM KODU]) ON DELETE CASCADE ON UPDATE CASCADE CHECK(CİNSİYET IN('BAY', 'BAYAN')) DEFAULT 'BARTIN' , NOT NULL, NOT NULL, NOT NULL, NULL , NOT NULL, NULL ) Tabloya Veri ( Yeni Kayıt) Ekleme Yukarıdaki gibi tanımlanmış tablomuzu düşünelim. Görüldüğü gibi tabloda NUMARA, ADI, SOYADI, BÖLÜM, TELEFON, CİNSİYET ve MEMLEKET alanları var. Tabloya dikkat edilirse, alanlardan bazıları zorunlu, bazıları değil. Bu tabloya veri girişi yapmak için en kolay yol aşağıdaki gibi olacaktır: INSERT INTO ÖĞRENCİLER VALUES(100, 'ALİ', 'KARA', 'BPR1', '0378-227-27-27', 'BAY', 'BARTIN') Yukarıdaki kod ile öğrenciler tablosunun tüm alanlarına sırasını bozmadan verilen bilgiler girilecek demektir. NOT: BÖLÜM alanı bölümler tablosundan referans alındığı için bölüm alanı için bölümler tablosunda olan bölümlerden girmek zorundayız. Yani öğrenciler tablosunda bölüm alanı için bölümler tablosunda olmayan bir bölüm kodu giremeyeceğiz. Alan belirtmeksizin tüm alanlara veri girişi yapılacaksa aşağıdaki kural geçerli olacaktır. INSERT [INTO] tablo_adı VALUES(veri1, veri2, [,...n]) Yukarıdaki tablomuza tekrar dönecek olursak; bazı alanların boş bırakılabilir (NULL) olduğundan bahsetmiştik. Boş bırakılabilir alanlara veri girişi yapmak istemezsek bunun için iki seçeneğimiz var; i. ii. Veri girişi yaparken boş bırakılabilir alanlara NULL yazma, Sadece veri gireceğimiz alanları belirterek veri girişi yapma. 1 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 6. Hafta Tabloya Veri Ekleme/Silme/Güncelleme Komutları BPR255 Veritabanı Yönetim Sistemleri-II I. Veri girişi yaparken boş bırakılabilir alanlara NULL yazma: INSERT INTO ÖĞRENCİLER VALUES(101, 'VELİ', 'SARI', 'BPR2', NULL, 'BAY', NULL) Bu kod ile öğrenciler tablosuna yeni bir kayıt girilmiş oluyor, fakat telefon ve memleket alanı boş bırakılıyor. Bu durumda veri tablosu aşağıdaki gibi olacaktır. Dikkat edilirse telefon ve şehir alanlarına veri yerine NULL yazılmış. Yani bu alanlar veri tabanında boş bırakılacak, dolayısıyla yer tutmayacaklar. Yine ilk başa, tablomuzu tanımladığımız alana dönecek olursak; tablomuzu tanımlarken şehir alanı için aslında bir varsayılan değer ayarlamıştık. Eğer her hangi bir alanın varsayılan değeri tabloya girsin istiyorsak bu alanlara DEFAULT yazmamız gerekir. INSERT INTO ÖĞRENCİLER VALUES(102, 'AYŞE', 'KIRMIZI', 'BPR1', NULL, 'BAYAN', DEFAULT) Bu komut çalıştırıldıktan sonra veri tablomuzun hali aşağıdaki gibi olacaktır: Burada telefon boş bırakılmış, şehir alanı ise bu alan için tanımladığımız varsayılan değer olmuştur. II. Sadece veri gireceğimiz alanları belirterek veri girişi yapma: Bu durumda aşağıdaki kurala göre kod yazmamız gerekecektir. INSERT [INTO] tablo_adı (alan1, alan2, [,...n]) VALUES(veri1, veri2, [,...n]) Aşağıdaki örneği kontrol ediniz; INSERT INTO ÖĞRENCİLER(NUMARA, ADI, SOYADI, BÖLÜM, CİNSİYET) VALUES(103, 'İPEK', 'YEŞİL', 'BPR2', 'BAYAN') Burada dikkat edilirse öğrenciler tablosuna direk olarak veri girişi yapılacak alanlar belirtilmiş ve her alanın sırasına göre verisi girilmiştir. Böylece boş bırakılabilecek alanlar seçilmemiş, dolayısıyla verileri de girilmemiş oluyor. Bu kayıt eklenirken dikkat edilirse normalde şehir alanı belirtilmemiş, fakat şehir alanı için varsayılan (default) değer olduğu için tabloya varsayılan değer girmiştir. Böylece veri tablomuzun son hali aşağıdaki gibi olacaktır. 2 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 6. Hafta Tabloya Veri Ekleme/Silme/Güncelleme Komutları BPR255 Veritabanı Yönetim Sistemleri-II NOT: SQL’de varsayılan (DEFAULT) değeri olan alanlar için herhangi bir veri belirtilmezse; o kayıt için o alanların varsayılan değerleri geçerli olacaktır. Veri girilecek alanları belirterek tabloya veri girilirken bilinmesi gereken bir diğer husus ise; alanlar hangi sırada yazılmış ise veriler de o sırada girilmelidir. INSERT INTO ÖĞRENCİLER(ADI,SOYADI,MEMLEKET,CİNSİYET,NUMARA,TELEFON,BÖLÜM) VALUES('AHMET', 'MAVİ','İSTANBUL' ,'BAY', 104, '0212-212-12-12', 'BPR1') Bu durumda verilerin tablodaki sırası değil de, hangi alana hangi kayıt girecekse karşılıklı olarak yazılmıştır, fakat kayıtlar tabloya gireceği zaman otomatik olarak yine olması gerekeceği gibi tabloya girecektir. Bu komuttan sonra veri tablomuz aşağıdaki gibi olacaktır. Normalde boş bırakılamayan alanlara veri girilmek zorunluluğu vardır, dolayısıyla alan belirterek veri girişi yapılan durumlarda NOT NULL olan alanların yazılması gerekiyor. Fakat IDENTITY olan alanlar tabloda boş bırakılamamasına rağmen veri girişi yapılırken her hangi bir veri yazılmak zorunda değildir. Çünkü zaten IDENTITY olan alanlar otomatik olarak üretilen sayılardan oluşuyor. Aşağıdaki siparişler tablosunu kontrol ediniz. CREATE TABLE SİPARİŞLER ( [SİPARİŞ NO] INT IDENTITY(100,1) [ÜRÜN ADI] VARCHAR(50) MİKTAR INT FİYAT SMALLMONEY AÇIKLAMA VARCHAR(50) ) PRIMARY KEY , NOT NULL, NOT NULL, NOT NULL, NULL Tabloda “sipariş no” PRIMARY KEY olmasına rağmen (primary key boş bırakılamaz) IDENTITY olduğu için veri girişlerinde “sipariş no” alanı için veri belirtilmiyor, çünkü zaten IDENTITY olan alanlar otomatik olarak üretilirler. Aşağıdaki örnek koda dikkat edin. INSERT INTO SİPARİŞLER VALUES('KLAVYE',2, 10, NULL ) Bu durumda sipariş no otomatik olarak üretilecektir. Açıklama alanı ise NULL olarak belirtildiği için boş olacaktır. Bu komut çalıştırıldıktan sonra siparişler veri tablosu aşağıdaki gibi olacaktır. 3 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 6. Hafta Tabloya Veri Ekleme/Silme/Güncelleme Komutları BPR255 Veritabanı Yönetim Sistemleri-II Sipariş no otomatik olarak üretilebilmesine rağmen istersek kendimiz de belirtebiliriz. Fakat bunun için insert komutundan önce IDENTITY_INSERT parametresini ON yapmamız gerekmektedir. Aşağıdaki kodu inceleyin. SET IDENTITY_INSERT SİPARİŞLER ON INSERT INTO SİPARİŞLER ([SİPARİŞ NO], [ÜRÜN ADI], MİKTAR, FİYAT, AÇIKLAMA) VALUES(150,'IPHONE-4S2',1, 1750, 'HEDİYE PAKETİ OLACAK') IDENTITY_INSERT parametresini ON yapılmış ise IDENTITY alanlar otomatik sayı üretemeyecektir. Tekrar üretebilmeleri için IDENTITY_INSERT parametresini OFF yapmamız gerekmektedir. SET IDENTITY_INSERT SİPARİŞLER OFF IDENTITY_INSERT parametresi her tablo için ayrı ayrı ayarlanır. Tablodan Veri (Kayıt) Silme Bir tabladan tüm kayıtları silmek için aşağıdaki kod kullanılabilir. DELETE [FROM] tablo_adı Bu kod belirtilen tablodan koşulsuz olarak tüm kayıtları silecektir. Fakat tipik olarak bir tablodan belirtilerek kayıt silinir. Bunun için koşul ifadeleri kullanılır. Koşul ifadesi kullanılarak bir tablodan kayıt silinecekse aşağıdaki kod kullanılır. DELETE [FROM] tablo_adı WHERE koşul_ifadesi Aşağıdaki örnekleri kontrol ediniz. Bu kod ile şartsız koşulsuz öğrenciler tablosundaki tüm kayıtlar silinecektir. DELETE FROM ÖĞRENCİLER NOT: Koşulsuz silme genelde yanlışlıkla yapılmaktadır. Ancak tablodaki tüm kayıtları silmek için kullanılabilir. Ancak tablonun içindeki kayıtların tamamı silinmek istendiğinde otomatik artan (IDENTITY) alanların tekrar en baştan başlaması için DELETE yerine TRUNCATE TABLE kullanılmalıdır. Bir tablodan tüm kayıtları temizlemek istendiğinde aşağıdaki komut kullanılır. TRUNCATE TABLE tablo_adı Bu komut öğrenciler tablodaki tüm kayıtları silecektir. TRUNCATE TABLE ÖĞRENCİLER 4 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 6. Hafta Tabloya Veri Ekleme/Silme/Güncelleme Komutları BPR255 Veritabanı Yönetim Sistemleri-II Bir koşula bağlı olarak kayıt silmek istersek aşağıdaki gibi kod yazmamız gerekecektir. DELETE FROM ÖĞRENCİLER WHERE ADI='ALİ' Burada da adı ali olan kayıtlar öğrenciler tablosundan silinecektir. Aşağıdaki örnekte de numarası 100 olan veya adı Ali olan kayıtlar öğrenciler tablosundan silinecektir. Birden fazla koşul aranınca koşullar arasına AND, OR ifadeleri konulabilir. Bunlara birleşik koşul ifadeleri denilir. Koşul ifadeleri daha sonra ayrıntılı olarak işlenecektir. DELETE FROM ÖĞRENCİLER WHERE NUMARA = 100 OR ADI = 'ALİ' Burada numarası 100 veya adı ALİ olan öğrenciler silinecektir. DELETE FROM ÖĞRENCİLER WHERE ADI = 'ALİ' AND SOYADI = 'KARA' Burada da adı ALİ ve soyadı KARA olan öğrenciler silinecektir. DELETE FROM ÖĞRENCİLER WHERE MEMLEKET LIKE '%ŞEHİR' Burada da memleket alanı “ŞEHİR” ile biten (KIRŞEHİR, NEVŞEHİR, ESKİŞEHİR gibi…) kayıtlar tablodan silinecektir. NOT: Kendisine referans edilmiş bir kayıt silindiği zaman eğer kendisine referans edilen alan ON DELETE CASCADE olarak işaretlenmiş ise o referans alınan alanın tüm referans kayıtları da otomatik olarak silnecektir. DELETE FROM BÖLÜMLER WHERE BÖLÜM_KODU LIKE 'BPR1' Örneğin öğrenciler tablosunda bölüm alanı BPR1 olan bütün kayıtlar silinecektir. Tablodan Veri (Kayıt) Güncelleme En basit güncelleme için aşağıdaki kod yazılabilir. Bu kod koşulsuz olarak tablodaki tüm isimleri CEMİL olarak değiştirecektir. UPDATE ÖĞRENCİLER SET ADI = 'CEMİL' Genelde güncellemeler bir koşula bağlı olarak yapılır. Koşul ifadeleri WHERE anahtar sözcüğü ile beraber kullanılır. UPDATE ÖĞRENCİLER SET ADI = 'CEMİL' WHERE NUMARA = 100 Burada numarası 100 olan öğrencinin adı CEMİL olarak değiştirilecektir. 5 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 6. Hafta Tabloya Veri Ekleme/Silme/Güncelleme Komutları BPR255 Veritabanı Yönetim Sistemleri-II UPDATE ÖĞRENCİLER SET ADI = 'SALİH', SOYADI = 'SİYAH' WHERE NUMARA = 100 Aynı anda birden fazla alan beraber güncellenebilir. Yukarıdaki örnekte adı ve soyadı alanları beraber güncellenmiştir. Kayıt silmede yaptığımız gibi güncelleme işlemlerinde de birleşik koşul ifadeleri kullanılabilir. UPDATE ÖĞRENCİLER SET ADI = 'SALİH', SOYADI = 'SİYAH' WHERE NUMARA = 100 OR NUMARA > 105 Burada numarası 100 olan veya 105’ten büyük olan öğrencilerin adları SALİH soyadları da SİYAH olarak güncellenecektir. Tablodaki boş bırakılabilir bir alanı daha önce doldurmuş fakat sonra boş bırakmak istersek aşağıdaki kodu yazabiliriz. UPDATE ÖĞRENCİLER SET TELEFON = NULL WHERE NUMARA = 105 Numarası 105 olan öğrencinin telefonu tablodan silinecektir. Varsayılan değeri olan bir alanı varsayılan değere getirmek için de aşağıdaki kod kullanılır. UPDATE ÖĞRENCİLER SET MEMLEKET = DEFAULT WHERE NUMARA = 105 Numarası 105 olan öğrencinin şehri memleket alanı için varsayılan değer olarak değiştirilecektir. NOT: Kendisinden referans alınmış bir alandaki herhangi bir kayıt güncellendiği zaman, eğer kendisinden referans almış olan alan ON UPDATE CASCADE olarak işaretlenmiş ise o referans alınan alanın tüm referans kayıtları da otomatik olarak güncellenecektir. UPDATE BÖLÜMLER SET BÖLÜM_KODU = 'BMP1' WHERE BÖLÜM_KODU = 'BPR1' Yukarıdaki kod çalıştırıldıktan sonra bölümler tablosundaki bölüm kodu alandaki BPR1 kaydı BMP1 olarak değiştirildikten sonra kendisinden referans almış olan öğrenciler tablosunda bölüm alanı BPR1 olan tüm kayıtlar da otomatik olarak BMP1 olarak güncellenecektir. 6 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 6. Hafta Tabloya Veri Ekleme/Silme/Güncelleme Komutları BPR255 Veritabanı Yönetim Sistemleri-II Dikkat edilirse bölümler tablosundaki güncellemeden sonra öğrenciler tablosundaki bölüm alanlarındaki kayıtlar da otomatik olarak güncellenmiştir. Sonuç olarak; Tabloya kayıt girmek için; INSERT [INTO] tablo_adı VALUES(veri1, veri2, [,...n]) Veya INSERT [INTO] tablo_adı (alan1, alan2, [,...n]) VALUES(veri1, veri2, [,...n]) Tablodan kayıt silmek için; DELETE [FROM] tablo_adı [WHERE {koşul_ifadesi}] Tablodaki tüm kayıtları temizlemek için; TRUNCATE TABLE tablo_adı Kayıt güncellemek için; UPDATE tablo_adı SET alan1 = değer1, alan2 = değer2, [,…n] [WHERE {koşul_ifadesi}] komutları kullanılır. 7 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi