Constraint yani türkçe karşılığıla kısıtlama, veritabanında DML işlemlerine çeşitli kontroller koymak için tanımlanan kurallardır. Örneğin, müşteri bilgilerin tutulduğu bir tabloda müşteri telefon numarasının boş girilmesini önlemek için veya unique müşteri numaraları için kolona constraint eklenebilir.

Constraint tablo oluşturulurken ya da tablo yapısını değiştirerek oluşturulabilir.

Oracle tarafında 5 adet constraint bulunmaktadır. Bunlar;

  • Primary Key
  • Unique Key
  • Foreing Key
  • Not Null
  • Check
  • Primary Key

Veritabanında oluşturalan tablolardaki kayıtlar için verilen unique(eşşiz) id’lerin başka bir kayıt içinde verilmesinin önüne geçer. Ayrıca primary key ile birlikte o kolona null(boş kayıt) verilmesini engeller.

Primery key tabloyu oluştururken

CREATE TABLE PERSONEL
(
 ID NUMBER PRIMARY KEY,
 NAME VARCHAR2 (20),
 SURNAME VARCHAR2 (20),
 DEPT VARCHAR2 (20)
)

Ya da sonradan ekleyebiliriz

ALTER TABLE PERSONEL ADD 
(
 CONSTRAINT PK_PERSONEL
 PRIMARY KEY (ID)
 USING INDEX
)

Primary key constraint oluşturduğumuzda veritabanı otamatik olarak o kolon için unique bir index oluşturur.

  • Unique Key

Unique key’de primary key gibi tablolardaki unique(eşşiz) id’lerin başka bir kayıt içinde verilmesinin önüne geçer. Primary key ve unique key arasındaki farklar.

Primary Key Unique Key
 Tabloda sadece bir tane oluşturulabilir. Birden fazla oluşturulabilir.
 Null kayıt girilemez. Null kayıt girilebilir.
ALTER TABLE PERSONEL ADD (CREATE TABLE PERSONEL
(
 ID INTEGER UNIQUE,
 ADI_SOYADI VARCHAR2 (20 BYTE),
 SEHIR VARCHAR2 (20 BYTE)
);
 CONSTRAINT UQ_PERSONEL
 UNIQUE
 (ID)
 USING INDEX 
 ENABLE VALIDATE);
  • Foreing Key

Foreing Key bir tablodaki primery key olan kayıtın başka bir tablodaki kayıtla ilişkilendirmesidir. Bir tablo için foreing key oluşturduğumuz zaman bu tabloya gireceğimiz yeni kayıtların ilişkilendirdiği tabloyla eşleşmesi gerekmektedir.

Önce primery key ilişkilendirilecek olan tabloyu oluşturalım ve ID kısmına primery key tanımlıyalım

CREATE TABLE CONS
(
 ID NUMBER(10),
 RAND_ST VARCHAR2(40 BYTE),
 RAND_ST2 VARCHAR2(40 BYTE),
 RAND_ST3 VARCHAR2(1 BYTE),
 RAND_DATE DATE
)

ALTER TABLE CONS ADD (
 CONSTRAINT PK_CONS
 PRIMARY KEY
 (ID)
 USING INDEX 
 ENABLE VALIDATE);

Sonra ikinci tabloyu oluşturalım ve bunun ID kolonunu bir önceki tablonun ID kolonuyla ilişkilendirilem.

CREATE TABLE CONS_FKEY
(
 ID NUMBER,
 SALARY NUMBER
)

ALTER TABLE CONS_FKEY ADD (
 CONSTRAINT FK_CONS_FKEY 
 FOREIGN KEY (ID) 
 REFERENCES CONS (ID)
 ENABLE VALIDATE);

Bu sayede ilk tabloda ID kayıtı olmayan bir kayıt ikinci tabloya kayıt olarak girilmesinin önüne geçmiş oluruz ve gelişi güzel kayıtlar olmasının önüne geçilir.

  • Not Null

Tablodaki bir kolona boş kayıt girilmesinin önüne geçilir.

CREATE TABLE PERSONEL
(
 ID INTEGER Not Null,
 ADI_SOYADI VARCHAR2 (20 BYTE),
 SEHIR VARCHAR2 (20 BYTE)
);

 

  • Check

Tablodaki kolonun belirleyeceğimiz değerlerde kayıt yapılmasını sağlar.

CREATE TABLE check_cost
(
 id NUMBER,
 name VARCHAR2 (50)
 );

Tablonun ID kolonu için alacağı değer aralığına göre constraint’imizi oluşturalım

ALTER TABLE check_cost ADD (
 CONSTRAINT check_cost_id
 CHECK (id BETWEEN 1 and 99)
 ENABLE VALIDATE);

Bu değer aralığından farklı bir değer girdiğimizde uyarı yapacak.

insert into check_cost values(102,'TEST');ORA-02290: check constraint (CHECK_COST_ID) violated

 

Tablodaki NAME kolonu için büyük harfle değer girme kısıtlamasını oluşturalım

ALTER TABLE check_cost ADD (
 CONSTRAINT check_cost_name_upper
 CHECK (name = upper(name))
 ENABLE VALIDATE);

Eğer gireceğimiz karakter küçük harfler içerirse uyarı yapacak.

insert into check_cost values(12,'teST');

ORA-02290: check constraint (CHECK_COST_NAME_UPPER) violated