Database Üzerinde Transaction Kontrol Komutları:
Transaction, datanın tutarlı şekilde korunmasını sağlayan yöntemdir. Database üzerinde kayıt yapma , silme, düzeltme vb. İşlemlerin yapılabilmesi için aşağıdaki komutlara ihtiyaç vardır;
INSERT INTO : Tabloya yeni bir kayıt eklenmesini sağlar.
Yazılımı;
INSERT INTO table [(kolon1, kolon2, …)] VALUES (değer1, değer2, …)
Kolon : Tablonun kayıt yapılacağı kolon adlarını belirler. Bir tablodaki kolon Sayısı 1-254 arasında ve o tabloda var olmalıdır.
Deger : O kolon için alacağı değer verilir. Kolon tipiyle ayni olmalıdır. Eğer kolon adları belirtilmezse değerler kolon sırasına göre değer almalıdır. Degerlere sysdate, user vb. Hazır fonksiyonlar aktarılabilir. Eğer bir alana değer verilmesi istenmiyorsa, yani bos değer verilmesi isteniyorsa NULL değeri verilir.
Örnek: Personel tablosuna yeni bir personel girişi yapalım;
INSERT INTO personel (ad,soyad,maas,ayrilma_tarihi,kayıt_giriş_tarihi)
VALUES (‘Mehmet’,’Batal’,400000000,NULL,SYSDATE)
Ayni örnek için kolon sırasını bildiğimiz düşünülürse şu şekilde de yazılabilir;
INSERT INTO personel
VALUES (‘Mehmet’,’Batal’,400000000,NULL,SYSDATE)
Sadece tek kayıt girişi yapılıyorsa, rahat veri girişi yapılması için değerlere değişken tanımlayarak veri girişi sağlayabiliriz. Böylece table her çalıştığında yeni veri girişi yapılır.
Örnek: Personel tablosuna her çalıştırdığımızda yeni bir personel girişi yapalım;
INSERT INTO personel (ad,soyad,maas,ayrilma_tarihi,kayıt_giriş_tarihi)
VALUES (‘&Adi’,’&Soyadı’,&maas,NULL,SYSDATE)
Örnek: Daha güvenli ve rahat giriş yapılacak şekilde kayıt yapılacak script yazalım;
SET ECHO OFF
ACCEPT ad PROMPT ‘Adini giriniz:’
ACCEPT soyad PROMPT ‘Soyadı giriniz:’
ACCEPT maas PROMPT ‘Maasini giriniz:’
INSERT INTO personel(ad,soyad,maas,ayrilma_tarihi,kayıt_giriş_tarihi)
VALUES (‘&ad’,’&soyad’,&maas,NULL,SYSDATE)
/
SET ECHO OFF
Kayıt yapılacak kolonların değerleri bilinmiyorsa veya başka bir tablodan değer alınması gerekiyorsa aşağıdaki yapı kullanılır;
Yazılımı;
INSERT INTO table [(kolon1, kolon2, …)] Altsorgu
Örnek: Personel tablosuna departman tablosundan departman kodu 38 olan personellerin değerlerini aktaralım;
INSERT INTO personel(ad,soyad,maas,ayrilma_tarihi,kayıt_giriş_tarihi)
SELECT adı,soyadı,maasi,ayrilma,kayıt_giriş
FROM departman
WHERE dept_id=38
UPDATE : Tablodaki kolonların değerlerini değiştirmek için kullanılır.
Yazılımı;
UPDATE table
SET kolon1=değer1, kolon2=değer2, …
[WHERE kotul]
Kolon : Tabloda değişiklik yapılacak kolon adıdır. Bir tablodaki kolon Sayısı 1-254 arasında ve o tabloda var olmalıdır.
Deger : O kolon için alacağı değer verilir. Kolon tipiyle ayni olmalıdır. Eğer kolon adları belirtilmezse değerler kolon sırasına göre değer almalıdır. Degerlere sysdate, user vb. hazır fonksiyonlar aktarılabilir. Eğer bir alana değer verilmesi istenmiyorsa, yani bos değer verilmesi isteniyorsa NULL değeri verilir.
Örnek: 41 nolu departmanın maasini %13 artıralım;
UPDATE Personel
SET maas=maas+maas*13/100
WHERE dept_id=41
Örnek: 649 nolu personelin departman kodu 10 olsun;
UPDATE Personel
SET dept_id=10
WHERE personel_id=649
Eğer WHERE koşulu konulmazsa tüm tablo için kolon değerini değiştirir. koşulu SET ile değiştirdiğimiz kolona veremeyiz.
DELETE : Tabloda belirtilen kayıtı siler.
Yazılımı;
DELETE FROM table
[WHERE kotul]
Örnek : Personelin maasları 100.000.000 ‘dan küçük olan kayıtları silelim;
DELETE FROM Personel
WHERE maas<100000000
Bir tablodaki tüm kayıtları silmek istersek koşul konmaz. Tablo silinmez, sadece kayıtları silinir.
Örneğin
DELETE FROM Personel
Foreign key veya primary key silinecek kayıtta varsa silinme hatası verir. Çünkü başka tablo ile ilişki kurulduğundan(join), diğer tablonun kullandığı kayıt vardır. O yüzden bu kaydı silebilmek için, ilişkide bulunduğu tüm kayıtları önce silmek gerekir. Ayni zamanda tablo üzerinde çalışan kullanıcı varsa kayıtlar silinemez. ROLLBACK komutu ile silinen kayıtları kurtarabiliriz(Tabi ki en son COMMIT komutu kullanılana kadar).
COMMIT : Bütün yapılan İşlemleri kesin olarak kalıcı olmasını sağlar. Böylece yapılan değişiklikleri varsa diğer kullanıcılarda görür.
SAVEPOINT x : İşlemi belirli bir yere yönlendirmek için kullanılır. X ile belirtilen alan için işaret konularak istenildiğinde bu işarete kadar işlemler yapılabilir.
ROLLBACK x : Bütün yapılan İşlemleri kesin olarak iptal eder. SAVEPOINT komutu ile belirlenen x kodlu alana kadar olan tüm itleri iptal eder.
Yazılımı;
ROLLBACK [TO SAVEPOINT x]
Örnek:
UPDATE personel …..
SAVEPOINT dön
DELETE FROM Personel
INSERT INTO …..
ROLLBACK dön teklindeki bir işlemle personel kaydının silinmesi ve yeni kayıt eklenmesi işlemi iptal edildi. Ama ilk yapılan değişiklik kaldı.
Read uncommitted : Commit olmadan görünmez. O halde böyle level yoktur.
Read committed : Oracle ’ın varsayılan değeridir. Committen sonra işlem görür.
Serializable : Yapılan insert İşlemleri gözükmez. Eski datalar gözükür.
Read only : Transaction işleminde sadece okuma var demektir.
ALTER TABLE : Yeni bir kolon eklemek, kolonun tipini veya uzunluğunu değiştirmek vb. yapısal değişiklikler yapılması için kullanılır. Eğer kolon üzerinde değişiklikler yapılacaksa dikkat edilmesi gereken koşullar vardır. Örneğin kayıt uzunluğu 15 iken uzunluğunu 10’a indirirsek kayıt içindeki bilgiler kesilir. Kolonlar ekleyebilir ve yapısal değişiklikler yapabiliriz. Constraint yapısını ekler, silebilir, enable ve disable yapabiliriz.
Yazılımı;
ALTER TABLE table
[ADD (kolon datatipi [DEFAULT değer] [NOT NULL]) , …]
[ADD [CONSTRAINT açıklama] tipi (kolon)]
[MODIFY (kolon datatipi [DEFAULT değer] [NOT NULL]) , …]
[DROP [CONSTRAINT açıklama] tipi (kolon)]
[ENABLE | DISABLE CONSTRAINT açıklama]
ADD : Yeni bir kolon ekler.
MODIFY : Kolonun içeriğini, uzunluğunu ve tipini değiştirir. Bunun için kayıtların değeri null olmalıdır.
DROP : Kolonu siler.
Kolon : Tabloda işlem yapılacak kolon adıdır.
Datatipi : Kolonun alacağı tipi belirler.
DEFAULT değer: Kolonun ilk alacağı değerdir. Kolon hiç değer atanmaz ise burada değer ile ifade edilen sabit veri aktarılır.
ENABLE : Unique veya primary key indexlerin otomatik yaratılmasını sağlar. Bütün kayıtların tanımlanan unique veya primary key tanımına uyması gerekir.
DISABLE : Unique veya primary key tanımını kaldırır.
Örnek : Personel tablosuna ek maas isminde 15 uzunluğunda bir kolon yaratalım. İlk değer 0 olsun.
ALTER TABLE Personel
ADD (ekmaas number(15) DEFAULT 15)
Örnek : Personel tablosundaki pers_id ile departman tablosundaki dept_id arasında FOREIGN KEY kuralım.
ALTER TABLE Personel
ADD CONSTRAINT personel_dept_id_fk
FOREIGN KEY (dept_id)
REFERENCES personel(pers_id)
Örnek : Personel tablosundaki maas kolonundaki alan uzunluğunu 15’e çıkaralım.
ALTER TABLE Personel
MODIFY (maas number(15))
Örnek : Personel tablosundaki maas kolonu silinsin.
ALTER TABLE Personel
DROP (maas number(15))
Örnek: Personel tablosundaki personel_id primary key için index yaratılması otomatikleştirelim;
ALTER TABLE Personel
ENABLE CONSTRAINT Personel_id_pk
DROP TABLE : Tabloyu fiziksel olarak siler. Rollback komutu ile silinen tablo geri getirilemez. Tabloyu ancak yetkisi olan kullanıcı silebilir.
Yazılımı;
DROP TABLE table
[CASCADE CONSTRAINTS]
Örnek: Personel tablosunu silelim;
DROP TABLE Personel
RENAME ..TO.. : Objelerin ismini değiştirmek için kullanılır. Otomatik olarak commit olur. Tabloyu ancak yetkisi olan kullanıcı silebilir.
Yazılımı;
RENAME eski_isim TO yeni_isim
Örnek: Personel tablosunun adını pers olarak değiştirelim;
RENAME personel TO pers
TRUNCATE TABLE : Tablodaki tüm kayıtları siler. Delete komutu gibi olmasına karşın o komuttan çok daha hızlı silme işlemi yapar. Rollback komutu ile silinen kayıtlar geri getirilemez. Otomatik olarak commit olur. Tabloyu ancak yetkisi olan kullanıcı silebilir.
Yazılımı;
TRUNCATE TABLE table
Delete komutu ile Truncate arasındaki en önemli fark; Delete komutu kayıtları silmek için kayıtlarda boşluk bırakır. Truncate ise tamamen kayıtları temizler, yani basa sarar.
Örnek: Personel tablosundaki tüm kayıtları silelim;
TRUNCATE TABLE Personel
COMMENT ON TABLE : Tablo veya kolonların içeriği hakkında açıklayıcı bilgi verilir. 2000 byte açıklama alanı girilebilir.
Yazılımı;
COMMENT ON TABLE table | COLUMN table.kolon
IS ‘açıklama’
Örnek : Personel tablosu açıklaması ‘Basak Sigorta’da çalışan kişiler’ olarak not düselim;
COMMENT ON TABLE personel
IS ‘Mars Sigorta’da çalışan kişiler’
Örnek : Personel tablosundaki pers_id kolonun açıklaması ‘Personel numarası’ olarak not düselim;
COMMENT ON COLUMN personel.pers_id
IS ‘Personel numarası’
ALL_COL_COMMENTS : Yetkili olan kullanıcının kolonlarının açıklayıcı notları listelenir.
USER_COL_COMMENTS : Tüm kullanıcıların kolonlarının açıklayıcı notları listelenir.
ALL_TAB_COMMENTS : Tüm kullanıcıların tablolarının açıklayıcı notları listelenir.
USER_TAB_COMMENTS : Yetkili olan kullanıcının tabloları için açıklayıcı notları listelenir.
Otomatik Numara Üretimi(Sequence):
Yaptığı is unique Sayılar üretmektir. Belli oranlarda arttırmalar yapılmakta kullanılır. Her çağrıldığında yeni bir Sayı üretir. Ekstra bir hesaplama yapılmadan, seri olarak tanımlandığı şekilde rakamlar üretir. Sayıları cacheden okuduğu için çok hızlı sonuç üretir.
Yazılımı;
CREATE SEQUENCE kolon
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE]
INCREMENT BY n : Sayının artış miktarı belirtilir. Varsayılan değer 1’dir. Birer birer Sayı arttırılır.
START WITH n : Numaranın üretileceği başlangıç numarasıdır. Varsayılan değer 1’dir.
MAXVALUE n : Numaranın alabileceği maksimum rakam yazılır. NOMAXVALUE ile bitiş numarası verilmez. Max = 1027
MINVALUE n : Numaranın alabileceği minimum rakam yazılır. NOMINVALUE ile başlangıç numarası verilmez. Min = 1
CYCLE | NOCYCLE : Maxvalue değeri kadar işlem yapıldıktan sonra işlemi tekrardan başlatır.Varsayılan değer NOCYCLE’dir.
CACHE : Cache Sayısı kadar Sayıyı hafızaya gönderir. Varsayılan değer NOCACHE=20’dir.
Örnek: Personel departmanının pers_id kolonunu 10’dan 50’ye kadar 2’ser 2’ser arttıralım;
CREATE SEQUENCE pers_id
INCREMENT BY 2
START WITH 10
MAXVALUE 50
NOCYCLE
NOCACHE
Örnek: Personel departmanının pers_id kolonunu birer birer arttıralım;
CREATE SEQUENCE pers_id
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE
USER_SEQUENCES : Sequences’in en son durumu gösterir.
Yazılımı;
SELECT sequence_name, min_value, max_value, increment by, last_number
FROM user_ sequences
Sequence_name : İşlemlerin tanımlandığı isimdir. Min_value : Sayının aldığı min değerdir. Max_value : Sayının aldığı max değerdir. Increment_by : Sayının aldığı artış miktarının gösterir. Cycle_flag : İşlemin tekrar yapılması isteniyorsa Y, istenmiyorsa N değerini alır. Cache_size : Hafızadaki cache Sayısıdır. Last_number : Numaranın alacağı değerdir NEXTVAL : En son aldığı Sayının bir sonra alacağı değeri gösterir.
Örnek: Personel tablosuna pers_id kolonuna otomatik değerler atayarak kayıt edelim;
INSERT INTO personel
VALUES (pers_id.NEXTVAL,’Mehmet’,’Batal’)
CURRVAL : O anki Sayısal değeri gösterir. Eğer hiç nextval fonksiyonu kullanılmamışsa değeri bos değer gelir.
Örnek: pers_id kolonunun o anki alacağı değeri seçelim;
SELECT pers_id.CURRVAL
FROM DUAL