PostgreSQL Tabloda Kolon Kısıtlamaları
PostgreSQL Tabloda Kolon Kısıtlamaları,Tablo da kolon kısıtlamaları verilerin genel olarak nasıl tutulacağını tablodaki ilgili kolona boş değer girilip girilmemesi isteğini ,boş bir değer girilirse ne yapılacağını ,aynı veriyi birden fazla girilmesini istemediğimiz durumlarda vs kullanabiliriz.
NULL :
İlgili kolona boş değer girilmesine izin verir. Kolon oluştururken kısıtlama girilmezse default da null parametresini alır.
create table personel( adres text NULL)
NOT NULL:
İlgili kolona boş değer girilmesine izin verilmez.
create table personel( TC_No integer NOT NULL)
UNIQUE:
Adından da anlaşılacağı üzere kolon da benzersiz değerler tutmamıza fayda sağlar yani UNIQUE eklenmiş kolona aynı değeri iki kez girmenize izin verilmez fakat burda dikkat edilmesi gereken NULL değeri birden fazla tekrar edebilir .Bunun sebebi NULL değerleri unique(benzersiz) olarak görmesidir.
create table Konum( sehir UNIQUE)
CHECK :
Veri eklerken yada güncellerken CHECK parametresinden sonra yazdığınız değere göre veriyi kontrol eder.
CREATE TABLE personel(dogum_tarihi date CHECK (dogum_tarihi>'1900-01-01')
PRIMARY KEY:
NOT NULL ve UNIQUE kısıtlamalarının birleşimidir. Primary key eklenen kolonlar da clustered index otomatik olarak oluşturulur.
create table personel( id serial PRIMARY KEY)
REFERENCES:
Farklı bir tablodaki farklı bir kolonun veri tipini kısıtlar.
CREATE TABLE public.personel_dogum_tarihi
(
id integer,
dogum_tarihi date,
p_id integer,
CONSTRAINT personelfk FOREIGN KEY (p_id)
REFERENCES public.personel (id) --MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
);
Yukarıdaki özellikleri kullanarak kendiniz de örnekler yapmanızı tavsiye ederim.
EXCLUDE
Bu parametre ile iki satır arasında karşılaştırmalarında kullanılır.
CREATE TABLE personel(
ID INT PRIMARY KEY NOT NULL,
isim CHAR(50),
yaş INT ,
adres CHAR(50),
maaş REAL,
EXCLUDE USING gist
(isim WITH =,
yaş WITH <>)
);
Yukarıdaki tablo da yaşın aynı olma koşulunu girdiğimizden dolayı aynı isime ait farklı bir yaş insert edilmek istendiğinde hata dönecektir.
INSERT INTO personel VALUES(1, 'faruk', 29, 'Ankara', 1000.00 );
INSERT INTO personel VALUES(2, 'faruk', 29, 'Afyon', 2000.00 );
INSERT INTO personel VALUES(3, 'faruk', 50, 'Konya', 200.00 );
Son inserti eklemek istediğimizde aşağıdaki gibi hata dönecektir.
ERROR: HATA: uyuşmayan kayıt, “personel_isim_yaş_excl” exclusion kısıtlamasını ihlal etmektedir DETAIL: (isim, “yaş”)=(faruk , 50) anahtarı, mevcut (isim, “yaş”)=(faruk , 29) anahtarıyla uyuşmuyor.
NOT: Exclude komutu kullanmadan önce btree_gist extensionını yüklemeniz gerekmektedir.