Oracle Ders 6 – Constraints (Kisitlamalar) – Part 3

Merhaba Arkadaslar,
Bu yazimizda Oracle DB Constraint(kisitlamalar) konusuna devam edecegiz ve bu konuyu bu ders ile bitirecegiz 🙂

Bir tabloya dair kisitlamalari su sorgu yardimi ile gorebilirz, bir onceki derimizde calistigimiz KISITLAMALAR isimli tablomuz icin sorgumuz ;

select constraint_name , constraint_type , search_condition, r_constraint_name 
from user_constraints
where table_name ='KISITLAMALAR';


oracle_ders6_01

Resimde goruldugu user_constraints tablomuzdan istedigimiz alanlari sectik.
constraint_name alaninda bizim verdigimiz isimlerdeki constraintler ve isim vermeden olusturdugumuz oraclein verdigi isimleri gorebiliriz.

constraint_type alaninda
c–> check veya not null
u–>unique
p–>primary key
r—>foreign key anlamina gelmektedir.

Disable/Enable Constraints

Kisitlamamizi pasif/aktif edebiliriz.

alter table tablename
disable constraint constraintname;

alter table tablename
disable constraint constraintname;

Bunu neden yapariz peki ? Dusunelim veritabanimizda cok yogun bir sekilde veri ekleyecegiz , ornegin check kontrolunu her defasinda her veri icin yapmak vakit alacaktir. Bu durumda gecici olarak disable ederiz ve islem tamamlaninca enable duruma getiririz.

alter table kisitlamalar
disable constraint kisitlamalar_alan4_ck;

Kisitlamalar tablmuzda alan4_ck isimli constraintimizi disable ettik.
Simdi bir kayit ekleyelim, ve normal sartlarda bu kisitimizin izin vermeyecegi sekilde olsun

insert into kisitlamalar (alan1,alan2,alan3,alan4,alan5) values ('deger1-5','deger2-5','deger5',3,20);

dikkat ederseniz, 3 degerini verdim normalde alan4>5 kontrolumuz vardi. Islem basariyla sonuclandi.

Disable ettigimiz alan4_ck kisitimizi tekrar enable duruma getirelim bakalim ne olacak ?

alter table kisitlamalar
enable constraint kisitlamalar_alan4_ck;


oracle_ders6_02

Gordugunuz gibi constraint alanimizi enable hale getirmeye calistigimizda buna izin vermedi.Mevcut veride kisitimiza uymayan bir durum var.

Drop Constraint (Kisitlamalari Dusurmek/Silmek)

alter table tablename
drop primary key | unique(columname)
| constraint constraintname;

Bu genel form ile tablolarimizdaki kisitlamalarimizi silebiliriz
Dikkat ederseniz;

  • alter table tablename drop primary key; ile primary key
  • unique(columname) ile unique kisitlamamiz
  • genel olarak constraint anahtar kelimesi ile constraintname i verip silme islemini gerceklestirebiliriz.
alter table kisitlamalar drop unique (alan3);
alter table kisitlamalar drop constraint kisitlamalar_alan4_ck;

ile alan3 ve alan4 icin tanimladigimiz kisitlamalari silebiliriz.

primary key alanimizi drop ederken hata ile karsilasabiliriz, bunun nedeni primary key alanimiz diger bir tabloda referans olarak bulunuyorsa oracle bize bu islemi yapmak icin izin vermeyecektir.

ilk dersimizde ekledigimiz tablomuzdan yararlanalim,

alter table customers drop primary key;


oracle_ders6_03

Gordugunuz gibi primary key alanimizi dusurmek icin izin vermedi. Bunun icin su yontemden yararlanabilirz,

alter table customers drop primary key cascade;

Constraint (kisitlamalar) Derslerimizi ozetleyecek olursak

  • Bir constraint tabloya eklenen bir kuraldir.
  • Create Table islemi yapilirken veya Alter table ile eklenebilir
  • Primary Key kisitlamasi , ayni verinin iki kere eklenmesine veya null deger eklenmesine engel olur.
  • Her tablonun yalnizca bir tek Primary Key i olur
  • Unique kisitlamasi, primary key e benzer, fakat null deger alabilir ve birden fazla alan unique olarak tanimlanabilir
  • Check kisitlamasi, eklemek istedigimiz verinin, ilgili alanini kontrol eder ve sartin saglanip saglamadigini kontrol eder.
  • Not null ozel bir check durumudur
  • Bir column birden fazla constraint icin tanimlanabilir
  • Constraintler modifiye edilemezler, degistirmek istersek once drop edip sonra tekrar olusturmamiz gerekmektedir.

Bu dersimizin de burada sonuna geldik 🙂

Herkese Bol Javali Gunler 
Be an oracle man , import java.*; 
Levent Erguder

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *