Clear        


                
                    -- CONSTRAINTS --
-- insert veya update için kısıtlamalar (kurallar) getiriyoruz.
use Filmler
go
create table Besteci -- Film tablosu ile 1'e 1 ilişkisi olduğunu varsayıyoruz.
(
	id int not null,
	adi varchar(50),
	soyadi varchar(50),
	film_id int
)
go
insert into Besteci values (1, 'James', 'Horner', 1)
go
select * from Besteci
--------------------------------------------------------------------------------------------------------
-- DEFAULT CONSTRAINT:
go
alter table Besteci
add constraint df_filmid
default 0 for film_id
go
insert into Besteci (id, adi, soyadi) values (2, 'John', 'Williams')
go
select * from Besteci
--------------------------------------------------------------------------------------------------------
-- CHECK CONSTRAINT:
go
insert into Besteci values (3, 'Çağıl', 'Alsaç', 99)
go
select * from Film
go
select * from Besteci
go
delete from Besteci where adi = 'Çağıl' and soyadi = 'Alsaç' and film_id = 99
go
select * from Besteci
go
alter table Besteci
add constraint chk_filmid1
check (film_id <= 7)
go
insert into Besteci values (3, 'Çağıl', 'Alsaç', 99)
go
select * from Besteci
go
insert into Besteci values (3, 'Hans', 'Zimmer', 2)
go
select * from Besteci
go
alter table Besteci add constraint chk_besteciadi
check (LEN(adi) >= 3)
insert into Besteci (id, adi, soyadi) values (4, '', 'Manço') -- LEN(adi) = 0 olacağı için hata verecektir!
insert into Besteci (id, adi, soyadi) values (4, 'Barış', 'Manço')
--------------------------------------------------------------------------------------------------------
go
alter table Besteci
add constraint chk_adi
check (LEN(adi) > 1)
go
insert into Besteci (id, adi, soyadi) values (4, 'B', 'Tyler')
go
select * from Besteci
go
insert into Besteci (id, adi, soyadi) values (4, 'Brian', 'Tyler')
go
select * from Besteci
--------------------------------------------------------------------------------------------------------
go
alter table Besteci
add constraint chk_filmid2
check (film_id >= 5)
-- film_id'si 5'ten küçük kayıtlar var. bu yüzden bu kayıtlar varken bu constraint'i ekleyemez.
go
alter table Besteci with nocheck
add constraint chk_filmid3
check (film_id >= 5)
-- with nocheck: Daha önce eklenen kayıtları gözardı et.
--------------------------------------------------------------------------------------------------------
-- PRIMARY KEY CONSTRAINT:
go
alter table Besteci
add constraint pk_id
primary key (id)
-- id sütunu tablo yaratılırken "not null" olarak belirlenmiş olmalı!
--------------------------------------------------------------------------------------------------------
-- FOREIGN KEY CONSTRAINT:
go
alter table Besteci with nocheck -- eski kayıtları yoksay (kullanmayabiliriz)
add constraint fk_filmid 
foreign key (film_id) references Film (id)
on delete set null on update cascade
-- on delete cascade: İlişkideki kaydı da siler. Kullanmak tehlikeli.
-- on delete set null: Film tablosundan siler, ilişkide olduğu Besteci tablosunda film_id değerine 
-- null değer atar.
-- on delete set default: Film tablosundan siler, ilişkide olduğu Besteci tablosunda film_id değerine 
-- default değer atar.
-- "on delete" yerine "on update" de yazabiliriz.
-- Ne "on delete" ne de "on update" yazmadığımız zaman kendi otomatik olarak "no action" tanımlıyor 
-- ve ilişkili tablolar üzerinde update ve delete işlemleri yaptırmıyor.
--------------------------------------------------------------------------------------------------------
-- Bir tabloda bir sütunu unique yapmak?
go
alter table Besteci
add constraint uq_soyadi
unique (soyadi)
--------------------------------------------------------------------------------------------------------
go
drop table Besteci