SQL-4

BÖLÜM-4  VIEW (BAKIŞ) OLUŞTURMAK
 TEMEL TABLO (BASE TABLE) VE BAKIŞ (VIEW) KAVRAMI
 VIEW OLUŞTURMANIN YARARLARI
 VERİ GÜVENLİĞİ
 SADECE VIEW KULLANARAK GERÇEKLEŞEBİLEN SORGULAMALAR
 VERİ BÜTÜNLÜĞÜNÜN SAKLANMASI
BÖLÜM-5 TABLOLARDA DEĞİŞİKLİK YAPMA
 TABLOYA VERİ EKLEME
 TABLO SATIRLARINI SİLME
 TABLO SATIRLARINDAKİ VERİLERDE DEĞİŞİKLİK YAPMA–GÜNCELLEME(UPDATE)
 TABLONUN YAPISINDA DEĞİŞİKLİK YAPMA–ALTER TABLE KOMUTU
 TABLOYA BİR KOLON EKLEME
 TABLONUN KOLONLARINDA DEĞİŞİKLİK YAPMA MODIFY
 TABLODAN BİR KOLON SİLME–DROP KOMUTU
 TABLONUN VEYA KOLONUNUN ADINI DEĞİŞTİRME–RENAME KOMUTU
 TABLONUN TÜMÜYLE SİLİNMESİ–DROP TABLE KOMUTU
 YAPILAN DEĞİŞİKLİKLERİN İPTALİ ROLLBACK VE COMMIT KOMUTLARI
 VIEW'LER ÜZERİNDE EKLEME,SİLME,DEĞİŞİKLİK İŞLEMLERİ
 VIEW İÇİNE SATIR EKLEME
 VIEW İÇİNDEN SATIR SİLME
 VIEW SATIRLARI ÜZERİNDE GÜNCELLEME YAPMA
 VIEW'İ SİLMEK
BÖLÜM-6 İNDEKS OLUŞTURMA VE KULLANMA

 İNDEKS OLUŞTURMANIN AMACI
 İNDEKS YARATMA
 TEK BİR ALANA GÖRE ARTAN SIRADA INDEKSLEME
 TEK BİR ALANA GÖRE AZALAN SIRADA İNDEKSLEME
 BİRDEN FAZLA ALANA GÖRE İNDEKSLEME
 UNIQUE SÖZCÜĞÜ
 İNDEKSİN SİLİNMESİ
BÖLÜM 7
ERİŞİM KONTROLÜ VE SİSTEM GÜVENLİĞİ
 GİRİŞ
 VERİ TABANI NESNELERİN GÜVENLİĞİNİN SAĞLANMASI
BÖLÜM 8
 HAREKET YÖNETİMİ
 TEMEL KAVRAMLAR
 ESKİ DURUMA DÖNME (RECOVERY)
 AYNI ZAMANDA ÇOK SAYIDA İŞLEME (EŞZAMANLILIK CONCURRENCY)
 COMMIT VE ROLLBACK KOMUTLARI
 EŞZAMANLI ERİŞİMLER İÇİN KİLİTLEMEYÖNTEMİ LOCK TABLE KOMUTU
 OTOMATİK KİLİTLEME
 ÖZET
 Kaynaklar

BÖLÜM 4 VIEW (BAKIŞ) OLUŞTURMAK

TEMEL TABLO (BASE TABLE) VE BAKIŞ (VIEW) KAVRAMI

   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ğin DATE'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

Kaynaklar:Prof.Dr.Mithat UYSAL,Marco CANTÜ