PostgreSQL PRIMARY KEY -FOREIGN KEY ON DELETE ve ON UPDATE

PostgreSQL PRIMARY KEY -FOREIGN KEY ON DELETE ve ON UPDATE,Tabloda Kolon Kısıtlamaları isimli yazımda  primary key ve foreign key den bahsetmiştim.

Bu yazımda primary key ve foreing key  de  on delete ve on update ‘i anlatarak örnekler yapacağım.

-- DROP TABLE public.personel cascade;
CREATE TABLE public.personel
(
    id integer NOT NULL UNIQUE,
    isim character(50),
    adres character(50) ,
    tckimlikno character(11) ,
    "maaş" real,
  CONSTRAINT personel_pkey PRIMARY KEY (id)
    -- CONSTRAINT personel_isim_tckimlikno_excl EXCLUDE USING gist (
      --  isim WITH =,
     --   tckimlikno WITH <>)

)

Yukarıda personel tablosunu oluştururken tablomuzun sonunda CONSTRAINT   parametresi ile PRIMARY KEY komutu ile beraber tablo içerisinde PRİMARY KEY koyulması istenilen tabloyu belirterek tablomuzu oluşturuyoruz.

-- DROP TABLE public.personel_dogum_tarihi;
CREATE TABLE public.personel_dogum_tarihi
(
    id integer,
    dogum_tarihi date,
    p_id integer,
    CONSTRAINT aa FOREIGN KEY (p_id)
        REFERENCES public.personel (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE CASCADE
)

Yukarıdaki personel_dogum_tarihi tablomuzu oluştururken CONSTRAINT kısmında Foreign key oluşturulacağını belirtiyoruz bunu belirtirken de ON UPDATE ve ON DELETE komutları da devreye giriyor.  personel_dogum_tarihi tablosunda ON DELETE CASCADE parametresi kullanılmıştır.

Bu parametre ile personel tablosunda kayıt silindiğinde personel_dogum_tarihi tablosunda da ilgili kaydı silecektir.

 

ON UPDATE ve ON DELETE komutları  aşağıdaki parametreleri alarak kullanılabilir.

  • SET NULL
  • SET DEFAULT
  • NO ACTION
  • CASCADE
  • RESTRICT

Yukarıdaki parametreler ile personel  delete veya update yapıldığında personel_dogum_tarihi tablosunda null değer olsun, kolonun default değeri alınsın  gibi işlemleri yapmak için kullanılır.

Bunları örnek yaparak pekiştirelim.

İlk olarak oluşturduğumuz tablolara veri yükleyelim.

    INSERT INTO public.personel(
	id, isim, adres, tckimlikno, "maaş")
	VALUES (1, 'faruk', 'erdem', '11245676866', 1);
	
	INSERT INTO public.personel_dogum_tarihi(
	id, dogum_tarihi, p_id)
	VALUES (1, '1991-08-30', 1);
	
	INSERT INTO public.personel(
	id, isim, adres, tckimlikno, "maaş")
	VALUES (2, 'ayse', 'aa', '11225675866', 2);
	
	INSERT INTO public.personel_dogum_tarihi(
	id, dogum_tarihi, p_id)
VALUES (2, '1991-07-30', 2);

Verilerimizi insert ettikten sonra   aşağıdaki şekilde personel tablomuzdan kayıt silelim ve personel doğum tarihi tablosundan da silinmiş mi görelim.

delete from personel where id=2

Personel tablomuzu sorguladığımızda verinin silindiğini görüyoruz.

 

Yukarıda  görüldüğü gibi personel_dogum_tarihi tablosunu kontrol ettiğimizde ikinci kaydın  buradan da silindiğini görmekteyiz.

Loading