Bu bölüme kadar oluşturulan ve kullanılan tablolar,veri
tabanı yada SQL açısından temel tablolar(base tables) adını
alırlar.Bu tablolar fiziksel olarak veri tabanı ortamında
mevcut olan tablolardır.
View terimi farklı kullanıcıların veri
tabanına nasıl baktıklarını yada bakış acılarını anlatan bir
terimdir.Kullanıcı fiziksel olarak mevcut olan tabloların
sadece bir kısmı ile ilgilenebilir. Temel
tabloların tamamı yada bir kısmı kullanılarak elde edilen fiziksel
olarak veri tabanında olmayıp sadece nasıl erişebileceğimize dair
bilginin saklandığı tablolara bakış (view) adı verilir.SQL,bu
tür tabloların oluşturulmasına imkan sağlamaktadır.
VIEW
OLUŞTURMANIN FAYDALARI
VERİ GÜVENLİĞİ
Veri tabanı içinde bulunan tablolardaki bazı sütunlarda bulunan
bilgilerin,herkes tarafından görünmesi istenmeyebilir.Örneğin
personelin brüt maaşlarının herkes tarafından listelenebilir olması
sakıncalı olabilir.Bu durumda,personel adlı
temel(base)tablodan,persview adlı bir view oluşturulabilir: CREATE VIEW persview AS
SELECT Sicil,SosGvN,Ad,Soyad,Dtrh,Adrs Cns,Bol_no,YonGSn FROM
personel;
Pesview adlı view,herkesin kullanımına açık,personel adlı base
(temel) tablo ise,yetkili kişiler dışındakilere,erişilemez hale
getirilirse,maaşların herkes tarafından erişebilir bilgi olması
önlenmiş olur.Bir view'den bilgi listelenmesi temel tablodan bilgi
listelenmesinden farklı değildir. SELECT * FROM preview;
Persview'den,maaşlar hariç,tüm personel bilgileri
listelenecektir. Bir temel tablodan bir view oluştururken,temel tablodaki yanı sütun
(alan) isimlerini kullanmak zorunlu değildir. Örneğin parça
adlı ve Par_No,Par_Ad,Pr_No,Fiyat,adlı sütün isimlerini içeren tablo
kullanılarak oluşturulan parview içinde, Par_No yerine Parca_No
Fiyat yerine Fiy isimleri kullanılabilir. PARVIEW (parca_n,fiy)AS SELECT par_no,fiyat FROM parça;
SADECE VIEW KULLANARAK GERÇEKLEŞEBİLEN SORGULAMALAR Bir tablodan elde edilebilecek bilgiler için,iki kademeli
işlem gerektiren sorgulamalarda,ilk adımda bir view oluşturup ikinci
adımda esas sorgulamayı bu view yardımı ile gerçekleştirmek,çoğu
kez kaçınılmaz bir durumdur. Aşağıdaki soru ve bunun
çözümü olan SQL ifadeleri bu konuda
bir fikir verecektir:
Örnek:Her bölümde,o bölümdeki ortalama maaştan
daha yüksek maaş alanlarını listeleyiniz? Bu sorunun cevaplandırılması için önce her bölümdeki ortalama
maaşların bulunması gerekmektedir. CREATE VIEW bol_or_vıew (bol_no,ort_brut) AS
SELECT bol_no,AVG(brut) FROM personel GROUP BY bol_no; Daha sonra yaratılan Bol_or_view yardımı ile (bu view, bölüm noları
ve bölüm ortalama maaşlarını saklamaktadır) sorulan sorunun cevabı
elde edilebilir: SELECT *
FROM personel WHERE bol_no_bol_or_view.bol_no: AND. Brut >ort_brut;
VERİ BÜTÜNLÜĞÜNÜN SAĞLANMASI View oluşturma esnasında CHECK sözcüğünün kullanılması ile,o view
oluştururken sağlanması gereken koşulların,daha sonra view içine
veri ekleme yada değişiklik işlemlerinde de ihmal edilmesi
engellenmiş olur.Örneğin aşağıda view oluşturulsun: CREATE
VIEW deneme AS SELECT FROM personel WHERE brut >25000000 WITH CHECK
OPTION; Burada,brüt maaşı 25000000'ün üstünde olan personelden oluşan bir
deneme adlı view oluşturulmuştur.Daha sonra view içine,
INSERT INTO deneme
VALUES(223,'2323','Ayşe','şen',130000000);
Komutu ile brüt maaşı 130000000 olan bir
personel eklenmek istendiği
zaman şu hata mesajı alınacaktır. ERROR:not enough non-null values Eğer CHECK opsiyonu kullanılmasaydı hata mesajı alınmadan bu veri
view içine yüklenecekti.Bir tablo yada view üzerinde veri eklenme,güncelleme ve silme
işlemleri yapılabilmektedir.
BÖLÜM 5
TABLOLARDA DEĞİŞİKLİK YAPMA
TABLOYA VERİ EKLEME SQL'de mevcut,tabloya veri eklemek için kullanılacak olan komut INSERT komutudur.
Standart SQL'de,oluşturulan bir tabloya
veri yüklemek için tek imkan INSERT komutudur.INSERT komutu ile,tabloya,belli bir anda tek bir satır eklemek imkanı vardır.INSERT
komutunun yazılış biçimi aşağıdaki gibidir: INSERT INTO tablo adı (sütun adı1,sutun adı2,........sutun adın) VALUES (deger1,deger2,............degern); Örneğin,personel tablosuna,s,c,l no'su 212 olan personel ile
ilişkili bilgiler aşağıdaki gibi bir INSERT komutu ile
yüklenebilir: INSERT INOT personel(sicil,ad,soyad,dtrh,dyr,adrs) VALUES ('212','ali','Kuşcu'{12/12/1976}); Karakter türü verilen
''semboller arasında yüklendiğine,diğer
veriler içinse buna gerek olamadığına dikkat ediniz.Burada,
tabloya tüm kolonlarla ilgili veri yüklendiği için,istenirse kolon
isimleri ihmal edilebilir. Standart SQL'deki INSERT komutunun,belli bir anda tabloya tek bir
satır yüklemesine karşılık, bir çok SQL gerçekleştiriminde, yığın
halinde veri yükleyen hizmet programlarından (utility) faydalanmak
imkanı da vardır. Ayrıca,INSERT komutunun bu şekli ile tabloya veri yüklemek
pratikte tercih edilecek bir şey değildir. (Her tablo için bir INSERT komutu kullanılıyor.)Daha kullanışlı
olan yol,verilerin kullanıcıların zorlanmayacağı bir ekran düzeni
ile klavyeden yüklenmesi daha sonra bunların INSERT ile tabloya
yerleştirilmesidir. SQL'de ekrandan interactivative bilgi girişi ve ekran tasarımı
sağlayacak komutlar yoktur. Fakat SQL'in bir veri tabanı yönetim
yazılımının (dbase,foxpro,oracle) yada bir üst düzey dilinin (c,pascal,cobol vb) interactive bilgi girişine uygun komutlarını kullanılarak
bu işlemi arzu edilen kalitede gerçekleştirmesi mümkündür.
TABLO SATIRLARINI SİLME Bir tablonun satırlarını silmek için gerekli komut DELETE komutudur.Satır silme koşullu yada koşulsuz olarak gerçekleştirilebilir.
DELETE FROM personel; 25 rows
deleted Bu komut ile personel tablosundaki tüm satırlar silinecektir. 25 Rows deleted, mesajı ile,o anda tabloda bulunan 25 satırın silindiği
bilinmektedir. Koşula bağlı olarak satır silmenin mümkün olduğunu söylemiştik. Bunu
gerçekleştirmek için DELETE komutuna WHERE sözcüğü eklenmeli ve bunu
izleyen ifade koşulu göstermelidir.
Örnek:DELETE FROM personel
WHERE bol_no=2; 5 Rows Deleted Bu komut ile,2 numaralı bölümdeki personelin tümü tablodan
silinecektir. 5 Rows Deleted,mesajı ile de o anda 2 numaralı bölümde çalışan 5 personele ait
satırların silindiği belirtilmektedir.
Örnek:Aşağıdaki örnekte ise brut maaş alanı boş
olmayan tüm personel silinmektedir. DELETE FROM personel WHERE brut IS NOT NULL;
25 Rows Deleted
TABLO SATIRLARINDA DEĞİŞİKLİK YAPMA-GÜNCELLEME(UPDATE)
Tablo satırlarında güncelleme yapmak için SQL'de UPDATE komutu
kullanılır.DELETE komutunda olduğu gibi,UPDATE komutunu da koşullu
yada koşulsuz olarak kullanmak mümkündür.Koşul belirtilmemişse
belirtilen değişiklik tüm tablo satırları üzerinde gerçekleştirilir.Koşul belirtildiği taktirde,sadece koşulu sağlayan satırlar
üzerinde değişiklik gerçekleştirilir. UPDATE komutunun yazılış
biçimi aşağıdaki gibidir. Koşulsuz ise, UPDATE tablo adı SET kolon adı1=deger1,kolon adı2=deger2......kolon adın=degern; Koşullu olduğu taktir de, UPDATE tablo adı SET kolon adı1=deger1,kolon adı2=deger2.......kolon adın=degern WHERE koşul; Aşağıda UPDATE komutunun kullanışı ile ilgili örnekler verilmiştir.
Örnek:Tüm personelin brüt maaşlarına %12 zam
yapma işlemini gerçekleştiriniz:
UPDATE personel
SET brut=brut * 1.12;
Örnek:5'inci bölümde çalışan kişilerin maaşları
%35 zam yapan UPDATE komutunu yazınız? UPDATE personel
SET brut =brut+1.35 WHERE bol_no=5;
Örnek:2. bölümün yürüttüğü projelerde kullanılan
tüm parçaların fiyatlarına %7 zam yapan UPDATE komutunu yazınız: UPDATE parça
SET FİYAT=FİYAT * 1.07
WHERE pr_no IN(SELECT
proj_no WHERE bl_no=2);
Örnek:Sicil numarası 9756025 olan personelin
bölüm numarasını 5 olarak değiştiren ve maaşına %15 zam yapan UPDATE
komutunu yazınız? UPDATE personel
SET bol_no=5,brut=brut*1.14 WHERE sicil='9756025';
TABLONUN YAPISINDA DEĞİŞİKLİK YAPMA–ALTER
TABLE KOMUTU ALTER TABLE komutu ile tablonun yapısında değişiklik yapmak
mümkündür.Standart SQL'de değişiklikler,tabloya yeni bir kolon
ekleme (ADD sözcüğü yardımı ile ) ve mevcut bir kolonun
özelliklerini değiştirme (MODIFY komutu ile kolon genişliğini
değiştirme yada kolondaki verinin NULL yada NOT NULL özelliğini
değiştirme şeklindedir. Standart dışında çıkan bir çok SQL gerçekleştirimlerinde ise ayrıca
tablodan bir kolon silme (DROP),mevcut bir kolonun adını değiştirme
(RENAME ) yada tablonun adını değiştirme (RENAME TABLE )özellikleri
de,ALTER TABLE komutu içinde mevcuttur.
TABLOYA
BİR KOLON EKLEME ALTER table komutu içinde ADD sözcüğü kullanarak,mevcut bir
tabloya bir satır eklenebilir. Mevcut bir tabloya,yeni bir kolon eklenirken,o kolon
içindeki verinin türü,uzunluğu ve kolondaki verinin boş bırakılıp
bırakılmayacağı(NULL veya NOT NULL)özellikleri de belirtilir.
Örnek:Personel tablosuna, işe başlama tarihi
belirten yeni bir kolon ekleyiniz. ALTER TABLE personel
ADD is_dtrh DATE; Yeni eklediğiniz is_dtrh içinde veri yüklü
olamayacağı için boş
olacak yani NULL değerler taşıyacaktır.Eğer ADD
is_dtrh DATE NOT NULL; Şeklinde kullansak,bu kolon satırları gene boş olacaktı.Fakat bu
kolon ile ilişkili yeni boş değerler eklemek istendiğinde,müsaade edilmeyecekti (INSERT komutu ile).ADD sözcüğü ile aynı
anda birden çok kolon da eklenebilir.
TABLONUN KOLONLARINDA DEĞİŞİKLİK YAPMA MODIFY KOMUTU
Mevcut bir kolon üzerinde değişiklik yapma,değişken uzunluklu
bir veri tipine sahip olan kolonun genişliğini arttırma ile
sınırlıdır.Bu anlamda,kolon genişliğini azaltma yada veri tipini
değiştirme mümkün değildir. Bu işlem için MODIFY sözcüğü ALTER TABLE komutu içinde
kullanılır.
Örnek:Daha önce proje adlı tabloda VARCHAR (15)
olarak tanımlanmamış olan alanı, 25 olarak genişleten SQL komutunu
yazınız?
ALTER TABLE proje MODIFY yer VARCHAR (25); Aynı anda birden çok kolon üzerinde de değişiklik yapılabilir. Yukarıda belirtildiği gibi,tabloda daha önce tanımlanmış bir tür (type)
başka bir türe çevrilemez.ÖrneğinDATE'i MODIFY komutu ile CHAR,yada INT olan bir alanı VARCHAR şekline dönüştürmek mümkün değildir.
TABLODAN BİR KOLON SİLME–DROP
KOMUTU Mevcut bir tablodan,kolonu silmek için,ALTER TABLE komutu içine
DROP sözcüğü eklemek gerekecektir.
Örnek:Personel tablosundan,is_dtrh (işe başlama
tarihi) kolonunu silmek için; <
ALTER TABLE personel
DROP is_dtrh; Komutunu kullanmak gerekir. Aynı anda birden çok kolonda silinebilir.Bu
durumda,DROP
komutu içinde bunları virgüllerle ayırmak gerekir. ALTER TABLE personel
DROP is_dtrh,YonSGn; Bu komut ile personel tablosundan işe başlama tarihi ve yönetici
sosyal güvenlik numarası alanları silinmiştir.
TABLONUN VEYA KOLONUNUN ADINI
DEĞİŞTİRME–RENAME KOMUTU Mevcut bir tablonun,bir kolonunun adını değiştirmek için ALTER
TABLE komutu içinde RENAME sözcüğü kullanılmalıdır.
Örnek:Personel tablosunda brut alanını,maas olarak değiştirmek için
aşağıdaki komutu yazmak gerekir. ALTER TABLE personel
RENAME brut maas;
Örnek:Personel tablosunun adını elemanlar olarak
değiştirmek istersek aşağıdaki komutu kullanmak gerekir. ALTER TABLE personel RENAME TABLE elemanlar;
TABLONUN TÜMÜYLE SİLİNMESİ–DROP
TABLE KOMUTU Bir tablonun tümünü silme için DROP TABLE komutu kullanılmalıdır.
Örnek:Proje adlı tablonun silinmesi için
aşağıdaki komut gereklidir.
DROP TABLE proje;
Not:Veri tabanında bir tablo,DROP TABLE komutu
ile silindiği takdirde bu tablodan üretilmiş bütün VIEW'ler,bu
tablodan üretilmiş eş tablolar, tablo üzerindeki indeksler ve tablo
için konulmuş bütün özellikler de sistemden silinir.
YAPILAN DEĞİŞİKLİKLERİN İPTALİ ROLLBACK VE COMMIT KOMUTLARI
ROLLBACK komutu ile,veri tabanında kullanıcıların veri tabanı
çalışmaya başlamasında itibaren yaptığı tüm değişiklikleri yada en
son kullanılan COMMIT komutundan sonra yapılan tüm değişiklikleri
iptal etmek mümkündür.
ROLLBACK; Komutu girildikten sonra, tablodan kolon silme, kolon güncelleme,tablonun,tümünü silme,view silme gibi değişiklik işlemleri tümü
iptal edilerek önceki duruma geri dönülür. COMMIT komutu ise,kullanıcıların veri tabanına bağlandığı
andan itibaren yada kullanılan en son COMMIT komutundan sonraki
yukarıda bahsedilen türde bütün değişikliklerin kalıcı olarak veri
tabanına aksettirilmesi ve saklanmasını sağlar. COMMIT; Komutu ile o ana kadar gerçekleştirilen bütün değişiklikler, sistemde
kalıcı olarak yerleşecektir.
VIEW'LER ÜZERİNDE EKLEME,SİLME,DEĞİŞİKLİK
İŞLEMLERİ VIEW'ler üzerinde ekleme,silme ve değişiklik işlemleri esas itibar,ile tablolar üzerinde yapılan işlemlerle hemen hemen aynıdır.Fakat view'ler üzerinde bu tip işlemlerin gerçekleştirilmesinde bazı
kısıtlamalarda mevcuttur.Aşağıdaki hususlara dikkat edilmelidir. a)Bir view'in güncellenebilir nitelikte olması gerekir başka bir
değişle,CREATE VIEW komutunda FROM sözcüğünü izleyen kısmında
sadece bir tablo adı bulunmalıdır.
b)View içindeki hiçbir kolon birleşik fonksiyonlarca üretilmiş
olamamalıdır.(max,sum.. vb)
c)View'in ürettiği SELECT komutunda,DISTINCT,GROUP BY yada
HAVING sözcüklerini içeren işlevleri yerine getirilmiş olmamalıdır.
Bu koşulları sağlayan view'ler sadece okunabilir (read only)
özellikteki view'lerdir ve üzerlerinde hiçbir değişiklik yapılamaz.
VIEW İÇİNE SATIR EKLEME Daha önceden oluşturulmuş Ax adlı view,ad soyad,brut
alanlarını içermiş olsun.Bu view,güncellenebilir nitelikte ise
aşağıdaki INSERT komutu ile,aynen tabloda olduğu gibi kendisine bir satır eklemek mümkün olacaktır. INSERT INTO AX VALUES ('Ali','Kuşçu',120000000); Daha önceden,VIEW oluşturulurken,CHECK OPTION alternatif
kullanılmışsa, bu takdirde, ekleme esnasında,VIEW'i oluşturan koşul
ihmal ediliyorsa,sistem eklemeye müsaade etmeyecek ve hata mesajı
verecektir.
Örnek:Personel adlı tablodan, brüt ücreti
100000000 TL'nı aşan personeli alarak Yeni_View adlı bir View
oluşturunuz? CREATE VIEW Yeni_Vıew AS SELECT FROM personel WHERE brut >100000000 WITH CHECK OPTION;
VIEW İÇİNDEN SATIR SİLME
Güncellenebilir bir VIEW içinden satır silme işlemi,tablodan satır silma işlemi ile aynı şekilde gerçekleştirilebilir.
Örnek:Maaşı 200000000 den az olan kişiler
silinmek istenirse DELETE FROM Yeni_View
WHERE brut <200000000; Komutu kullanılarak yapılabilir.
VIEW SATIRLARI ÜZERİNDE GÜNCELLEME İŞLEMİ
Güncellenebilir viewlerde güncelleme işlemi tablolardakinin aynıdır.
Örnek:Yeni_View adlı View'de sicili 9756000 olan
kişinin maaşını 300000000 olarak değiştirmek için gerekli komut
yazınız?
UPDATE YENİ_View
SET brut= 300000000
WHERE sicil=9756000;
Komutları yazılabilir. VIEW'İ SİLMEK
Tabloların silinmesine benzer şekilde,sistemde oluşturulan bir view,DROP VIEW komutu ile silinebilir.
DROP VIEW Yeni_View; Bir view'in silinmesi ile,o view'e bağlı olarak oluşturulmuş
diğer bütün view'ler ve bu view ile ilişkili öncekilerin de tümü
silinmiş olacaktır.
BÖLÜM 6 INDEX OLUŞTURMA VE KULLANMA
INDEX OLUŞTURMANIN AMACI Bir index, veri tabanı ortamında bir tablo yada bir view gibi
nesnedir ve ilişkili olarak kullanıldığı tablo yada view'deki
satırların, indexleme alanı (keyfi anahtar olan) olarak kullanılan
kolondaki verilere göre sıralanmış biçimde işleme sokulmasını
(listeleme yada arama işlemi) sağlar. Bir tablo,indexlenmiş ise, içinde gerçekleştirilecek
bir arama yada koşullu listeleme (SELECT komutu ile) işlemi çok daha
hızlı biçimde gerçekleştirilebilecek.
INDEX YARATMA SQL'de bit tablo ile ilişkili olarak index yaratmak için gerekli
komut,CREATE INDEX komutudur.
Komutun genel yazılışı: CREATE INDEX index adı ON tablo adı (kolonad1, kolonad2,....kolonadn); İndexleme artan (ascending) yada azalan (descending) şeklinde
olabilir.Artan,alfabetik olarak A'dan Z'ye nümerik olarak küçükten
büyüğe şeklindedir.Azalan ise bunun tersidir.Hiçbir özel sözcük
kullanılmazsa indexleme artan sayılar yada alan adının yanında bir
boşluktan sonra ACS sözcüğü kullanılırsa bu alana göre artan sıralama
yapılacaktır demektir. Her hangi bir alan adının yanında DESC sözcüğünün kullanılması
ise indexlemenin azalan olacağını gösterir.Komutun yazılış
biçiminden anlaşılacağı gibi,aynı anda birden çok alana göre indexleme de yapılabilir.
TEK BİR ALANA GÖRE ARTAN SIRADA İNDEKSLEME
İşletmede çalışan personeli brüt
maaşlarına göre artan sırada listelemek istersek,brüt alanına göre
bir indeks oluşturmalıyız.
CREATE INDEX Per_maas ON PERSONEL (brut); İndex
CREATEed 130 Rows 130 satırlık personel tablosu ile ilişkili brüt kolonu indeks
anahtarı olarak kullanılan Per_maas adlı indeks oluşturulmuştur. Bu
durumda; SELECT * FROM personel; Şeklindeki listeleme komutu sonucunda,personel tablosundaki tüm
personel,brüt maaşlarına göre sıralı olarak listelenecektir.
TEK BİR ALANA GÖRE AZALAN SIRADA İNDEKSLEME İşletmede çalışan personeli brüt maaşlarına göre azalan sırada
(yüksek maaştan düşük maaşa doğru) listelemek istersek,brüt alanına
göre aşağıdaki şekilde indeks oluşturmak gerekir. CREATE INDEX Per_maas ON personel (brüt DESC);
BİRDEN FAZLA ALANA GÖRE İNDEKSLEME İşletmedeki personelin öncelikle adlarına göre,aynı adda
olanları soyadlarına göre,hem adı hem de soyadı aynı olanların
maaşlarına göre sıralanmış olarak listelenmesi istenirse aşağıdaki
komut kullanılmalıdır: CREATE INDEX p_ad_soy_m
ON personel (ad;soyad;brut); Bu durumda; SELECT * FROM personel; Komutu sonucunda aşağıdaki şekilde sıralanmış tablo görülecektir.
Sicil Ad Soyad Brut
177777 Ahmet
Deniz
70000000
35760 Ahmet Doğan
60000000 35 Ahmet Doğan 66000000
122 Ali Kuşçu 55000000
105 Ayşe Demir
45000000 145 Ayşe Demir
86000000
Burada,kolayca görüleceği gibi personel öncelikle adı alanına göre
sıralanmış hem de soyada göre sıralanmış olanların sıralanmasında
ise,brüt alanı dikkate alınmıştır. İndeks komutu;
CREATE INDEX p_ad_soy_t
ON personel (adi soyad,brut DESC); Şeklinde yazılsa
idi,tablodaki değerler;
Sicil Ad Soyad Brut
177777 Ahmet
Deniz
70000000
35 Ahmet Doğan
66000000 35760 Ahmet Doğan
60000000
122 Ali Kuşçu 55000000
145 Ayşe Demir
86000000 105 Ayşe Demir
45000000
Şeklinde sıralanırdı.Bu durumda farklı olan,ad ve soyad alanı
aynı olan kişilerin brüt maaşlarına göre,yüksek maaştan düşük maaşa
göre sıralanmış olmasıdır (brüt DESC ifadesinden dolayı).
UNIQUE SÖZCÜĞÜ Bir tablo,seçilen bir sütuna (alana) göre indekslenirken,
indeksleme alanı olarak seçilen sütundaki verilerin tekrarlanmasına
müsaade edilmesi istenmiyorsa,indeksleme yapılırken,CREATE INDEX
komutu içinde UNIQUE sözcüğü kullanılmalıdır. CREATE UNIQUE INDEX
Per_sicil ON personel (sicil); UNIQUE sözcüğü etkisi,bu komuttan sonra,tabloda,aynı sicilden
birden fazla tekrar olmasının engellemesidir. Personel tablosunda; INSERT INTO personel
VALUES(1111,'19999','Emine','Yıldırım','İstanbul'{12/23/1972}); Komutu ile sicili 1111 olan kişi eklenmek istendiği zaman,bu
sicilden daha önce o tabloda mevcutsa,ekleme kabul edilmeyecek ve,
Error – data is not unique Hata – veri tekrarsız (tek)
değildir. Şeklinde bir hata mesajı alınacaktır.
INDEKSİN SİLİNMESİ Bir tablo üzerinde tanımlanmış herhangi bir indeks,o tablonun
ve veri tabanından silinmesi ile otomatik olarak silinecektir. Tablo silinmeksizin,o tablo üzerinde her hangi bir indeks,o tablonun veri tabanından silinmesi içinse,DROP INDEX komutu
kullanılmalıdır.
DROP INDEX Per_in; Komutu ile indeks silindi. Böylece,personel tablosu üzerinde oluşturulmuş Per_in adlı indeks,personel ver tabanında kaldığı halde silinecektir.
BÖLÜM 7
ERİŞİM KONTROLÜ VE SİSTEM GÜVENLİĞİ
GİRİŞ Veri tabanına erişim kontrolü ve sistem güvenliğinin
sağlanması,en önemli konulardan biridir. Kim,hangi bilgilere erişebilecek;Ne kadarına erişebilecek? Kim hangi bilgiler üzerinde değişiklik yapma ve bilgileri
silme hakkına sahiptir? Veri tabanına çok sayıda kullanıcı tarafından erişebilen
ortamlarda, bu erişimin kontrolü son derece önemlidir.
VERİ TABANI NESNELERİNİN GÜVENLİĞİNİN
SAĞLANMASI Bu bölümde hemen hemen bütün sistemlerde kullanılan prensiplerden
bahsetmektedir.
A.
Sistem kullanıcısı (System User) Tüm veri tabanı ortamına hükmedenbilen
kullanıcıdır. Veri tabanı yöneticisinin (DBA-DATA administrator)
üstündedir. Sisteme, yeni kullanıcıları dahil edebilir; bir veya
daha fazla kullanıcıya veri tabanı yöneticisi yetkisi verilebilir.
Kullanıcıların parolalarını (şifre) değiştirebilir.
B.
Veri tabanı yöneticisi yetkisine sahip olan kullanıcılar, yeni
kullanıcıların sistemde çalışmaya başlamaları için gerekli koşulları
ve yeni kullanıcıların ayrıcılıklarını belirleme gibi veriye erişme
yetkilerine sahiptir.
C.
CONNECT ve RESOURCE ayrıcalıkları verilen kullanıcılar, veri
tabanına bağlanabilirler, yeni tablolar ve indeksler yaratabilirler.
D.
Sadece CONNECT ayrıcalığına sahip olan kullanıcılar, sadece mevcut
tablolara erişebilirler fakat kendi tablolarını yaratamazlar. BÖLÜM 8 HAREKET YÖNETİMİ
TEMEL KAVRAMLAR
Hareket yönetimi (transaction management)
bir veri tabanı yönetim sistemindeki en önemli işlemlerden biridir.Hareket yönetimi SQL komutları ile nasıl gerçekleştirebileceği gibi
bu bölümün konusunu teşkil edecektir.
ESKİ DURUMA DÖNME (RECOVERY) Bir hareket içindeki herhangi bir işlem
başarısızlıkla sonuçlanmışsa, o hareket içindeki işlemlerden
bazıları tarafından veri tabanı üzerinde gerçekleştirilmiş
değişiklikler iptal edilmeli ve veri tabanı hareketin başlamasından
önceki duruma dönmelidir.
AYNI ZAMANDA ÇOK SAYIDA İŞLEME(EŞZAMANLILIK CONCURRENCY) Aynı zamanda birden çok hareket aktif
halde olabilir.Bu hareketlerden bazıları aynı anda veri tabanı
üzerindeki aynı alanlara erişip değişiklik yapmak isteyebilir.Veri
tabanı yönetim sisteminin bu durumu kontrol etmesi zorunludur.
COMMIT
VE ROLLBACK KOMUTLARI Bir
hareketi oluşturulan komutlar sonunda; COMMIT;Komutu
kullanılmışsa,bu hareketin veri tabanı üzerinde oluşturduğu
değişiklikler sistem tarafından kalıcı hale getirilir. Hareketi oluşturan komutlar sonunda; ROLLBACK,Komutu
kullanılmışsa,gerçekleştirilen değişikliklerin tümü iptal edilecek
ve veri tabanı,hareketten önceki duruma dönecektir.
Örnek:UPDATE personel SET brut=27000000;COMMIT; Komutu
kullanılmışsa,bu hareketin veri tabanı üzerinde oluşturduğu
değişiklikler sistem tarafından kalıcı hale getirilir.
Hareketi oluşturan komutlar sonunda;
ROLLBACK,Komutu
kullanılmışsa,gerçekleştirilen değişikliklerin tümü iptal edilecek
ve veri tabanı,hareketten önceki duruma dönecektir.
Örnek:UPDATE personel SET brut=27000000 WHERE
sicil=9756070; INSERT
INTO bolum(bolum_ad,bolum_no,is_bas_trh) VALUES('Bilgi islem',12,{01/05/1990}); COMMIT; Bu
örnekte, personel tablosunda sicili 9756*70 olan kişi brüt maaşı
27000000 yapılmakta ve bölüm adlı tabloya ise, halkla ilişkiler adlı
bir bölüm,bölüm numarası,yöneticisinin işe başlama tarihi yeni bir
satır olarak eklenmektedir.
Yukarıda açıklandığı gibi,COMMIT komutuna kadar SQL komutları ANSI
standart yönetimine göre bir hareket kabul edecekler,COMMIT ile
komutlarca veri tabanında gerçekleştirilen değişiklikler kalıcı hale
gelecektir. COMMIT yerine ROLLBACK kullanılsa idi,o taktirde yapılan
değişiklikler iptal edilecek ve veri tabanında bu hareketten dolayı
bir değişme görülmeyecekti.
EŞZAMANLI
ERİŞİMLER İÇİN KİLİTLEME YÖNTEMİ LOCK TABLE KOMUTU
Farklı veri tabanı yönetim sistemleri dolayısı ile bunlar içindeki
SQL gerçekleştirimleri,veri tabanı içindeki tablo sütunlarına aynı
zamanda erişim ve güncelleme taleplerini farklı şekilde kontrol
etmektedir.Pek çok SQL gerçekleştiriminde mevcut olan LOCK TABLE
adlı sql komutu,kullanıcıya, kısıtlı bir zaman dilimi içinde bir
veya daha fazla tabloyu tek başına,özel olarak kullanma imkanı
vermektedir.Bu komutun yazılış biçimi aşağıdaki gibidir: LOCK
TABLE tablo yada view adı IN SHARE
| EXCLUSIVE MODE SHARE MODE
seçeneği kullanılırsa,diğer kullanıcılar tablo yada view üzerinde
sadece okuma işlemi (SELECT) yapabilir;Silme yada güncelleme
yapamazlar.SHARE ile kilitlenmiş bir tabloyu aynı anda çok sayıda
kişi kullanılabilir.(Bir kullanıcı her türlü hakka sahip olabilir;Diğerleri sadece okuma yapabilir.
LOCK TABLE
komutu,EXCLUSIVE MODE'da kullanılırsa,diğer kullanıcılar gene
tabloda herhangi bir değişiklik yapamazlar; tabloda sorgulama
yapılabilirler fakat tablo üzerinde herhangi bir kilitleme (LOCK
TABLE)işlemine girişmelerine müsaade edilmez. (SHARE MODE ile
aradaki en önemli fark budur.Her
tür kilitleme komutunun da,tablo üzerindeki kilitleme etkisi,tabloyu kilitleyen kullanıcının EXCLUSIVE MODE'da bir LOCK TABLE
işlemi uygulayıp uygulamadığını kontrol eder.
OTOMATİK KİLİTLEME
Bazı veri tabanı yönetim sistemleri, tablonun değişimine sebebiyet
verecek herhangi bir komut (INSERT;UPDATE;DELETE) uygulandığı
zaman,o tablo üzerinde otomatik olarak EXCLUSIVE
kilitleme oluşturur.Bu kilitleme herhangi bir COMMIT yada ROLLBACK
komutu ile ortadan kalkacaktır.
Örnek:LOCK TABLE X IN SHARE MODE; X tablosu SHARE MODE'da kilitleniyor.Diğer kullanıcılar sadece okuma
yapabilir. Örnek:LOCK TABLE Y IN EXCLUSIVE MODE; Y
tablosu EXCULUSIVE MODE'da kilitleniyor.Diğer kullanıcılar sadece
okuma yapabilir.Ve Y tablosu üzerinde kilitleme yapılamaz.
ÖZET
VERİ TABANINA KULLANICI OLUŞTURMAK
SQL>
desc dba_users; SQL>
create user mehmet(kullanıcı)
identified by mehmet(Pasword); YETKİ VERMEK DBA YETKİSİ (TAM
YETKİLİ) SQL>
GRANT CREATE SESSION TO MEHMET; (Oturum Açma Yetkisi) SQL>
GRANT CREATE TABLE TO MEHMET; (Tablo Açma Yetkisi) SQL>
GRANT DBA TO MEHMET; (Tam Yetki) SQL>
INSERT INTO DENEME VALUES(12);
Bu tabloya sadece tablo oluşturan kullanıcı
girer. publıc synonym verilirse herkes kullanır.
SQL> CREATE PUBLIC SYNONYM
deneme for
deneme.deneme; SQL>SHOW
USER (Hangi kullanıcı ile Veri tabanına Bağlısınız.) INSTANCE
MANAGER = SQL'de Kimler Çalışıyor. ŞİFRE DEĞİŞTİRME SQL>
alter user ali1 identified by
ali2;
CREATE ROLE (KULLANICIYA ROL ATAMAK) CREATE ROLE silme_rolu GRANT SELECT ON tbl_ogr TO silme rolu HAKKI GERİ ALMAK REVOKE KULLAN