You are on page 1of 22

SQL TABLO

TABLOLAR:
Veri sktrma zellii ile tablolarn, indexlerin boyutlar daha az bir yer kaplar.
Tablolar; SQL Server' da nesne olarak tanmlanr. Tablolar veri ierecek olan satr ve
stunlardan oluur. Verileri depolayan satrlar, bunlar kategori gibi birbirinden ayran
stunlardr.
eitli Tablo Tipleri Vardr;
1-Standart Table: Bu zamana kadar oluturduumuz kullanc tabanl tablo tipidir.
2-PartitionTable: Tm Standart Tablo zelliklerini iinde barndrr, verileri birden fazla
dosya gruplar iinde datr.
3-TemporaryTable(Geici Tablo): Tablo ad, # ile balarsa geici tablo oluturmu olursunuz.
Bunu, SQL Server servisi duruncaya kadar kullanabilirsiniz.
4-SystemTable: SQL Server 2012 ile ilgili sistem bilgilerinin tutulduu tablo eklidir. Bu
tablolarn ieriine direkt olarak mdahale edilemez.
Tablo oluturulurken verilecek zellikler
Tablolar olutururken isimlerini en fazla 128 karakter olarak verebilirsiniz. Her
tablonun ilk karakteri harf olmak zorundadr.

Burada deineceimiz zellikleri grmek iin herhangi bir tablo zerinde sa tua
basarak Design seeneini semeniz yeterli olacaktr.



Deising seenei altnda;



Burada seilen stunun veri tipine gre baz zellikler aktif, bazlar da pasif olabilir.
Bu zellikleri ksaca aklayacak olursak;

Descriptlon: Stunun aklamas.

Default Value: Veri girilirken stun deeri bo geildiinde, yazlmas istenilen ifade
veya hazr bir deerin balanmas.

Precision: Stuna eklenecek olan saysal deerler iin, toplam basamak says.

Scale: Stuna eklenecek olan saysal deerlerin, ondalk ksmndaki gsterilecek basamak
says.(Bu son iki deeri ondalk destei olan veri tipleri iin Condensed Data Type
ksmndan da ayarlanabilir.)

Identity: Tablo ierisinde kayt girii yaplrken, otomatik olarak artmas istenilen
stunlar iin seilir.

Identity Seed: Tablo ierisinde kayt girii yaplrken, otomatik olarak artmas istenilen
stunun balang deeri.

Identity Increment: Tablo ierisinde kayt girii yaplrken, otomatik olarak artmas
istenilen stunun art deeri.

Formula: Hesaplanm bir stunun formln grntler, ayarlar.

Collation: Dil ayarlarn belirler. Her stun iin ayr dil belirlenmesi yaplabilir.


SM TANIMLAMALARI:
SQL Server tablolar ve dier nesneleri, yazlm srasnda birka yoldan ifade edilebilir.
Bunlar:
FullyQualifiedNames: Bir SQL Server nesnesi iin tam isim tanmlamasdr ve drt
blmden oluur: Server ad, Database(veri taban) ad, Owner(sahip-Schema) ad ve
Object(nesne) ad.


SQL Server iinde oluturulan her bir obje ad; Unique yani, benzersiz bir fullyqualified
name tamak zorundadr.
rnein: SQL Server iinde ayn isimli iki tablo olabilir. Yalnz bunlarn farkl veri
tabanlarnda veya farkl ema yapsnda olmas gerekir. Dolays ile farkl FQN'ye sahip
olacaklar iin, bir problem tamayacaktr.
rnein: "gelen" ve "giden" isimli veri tabanlarnda; "ankara" isimli bir tablo
oluturduumuzda bunlar kullanrken, FQN belirtilmesi aadaki gibi olacaktr.



Server.database.owner.object
Server.gelen.dbo.ankara
Server.giden.dbo.ankara
Ayrca kullanm yerlerine gre isim yazlmlar, aadaki ekilde basite indirgenerek
yazlabilir.





Eer FQN belirtilmez ise nesneye ynelik yapaca uygulama iin, bulunan varsaylan
yolu kullanr.





Yukardaki iki tablo oluturma rneinde; karakaya3 veri taban iinde sistem isimli
iki tablo oluturulabilir. Sahipleri(Schema) farkl olduu iin, bu oluumda bir sorun k
arrken FQN ile arlr.
TABLO OLUTURMAK VE SLMEK
Tablo oluturmak iin CREATE TABLE komutu ve silmek iin ise DROP TABLE
komutu kullanlr.
Kullanmnn basit ekli aadaki gibidir:
Oluturma;



Silme:


UYGULAMA:
1) SQL Query Editr iine aadaki kodu yazalm.



Gelen.dbo.ankara
Gelen.ankara
Dbo.ankara
Create table karakaya3.dbo.sistem {Kyno int, sure int, fiyat int}
Create table karakaya3.dbo.sistem {Kyno int, sure int, fiyat int}
CREATE TABLE tablo_ad
(stun ad veri tipi [collate dil seimi] [NULL[NOT NULL]] )
DROP TABLE tablo_ad

karakaya3;
CREATE TABLE dbo.ankara
(
egitimno int IDENTITY (1,1) NOT NULL,
egitimad nvarchar (15) not null, dersler ntext NULL, fiyat int NULL
)



2) Kodu altrdktan sonra veri tabanmz iindeki Table nesnesi iinde "ankara" isimli
tablonun olutuunu grebiliriz. Eer gremiyorsanz Refresh seeneine tklaynz.



Bilgileri test etmek iin zerinde sa tua basarak, Design seeneine tklamamz yeterli
olacaktr.

TABLO DEKL ALTER TABLET
Oluturulmu bir tablo zerinde ilem yapmak iin ALTER TABLE komutu kullanlr.
UYGULAMA:
1) Aadaki kod, var olan bir tabloya yeni bir stun eklemek iindir.






2)altrdktan sonra tablonun tasarm ksmna girerek "sure" isimli yeni bir stunun
eklendiini grebiliriz.


Use karakaya3;
ALTER TABLE ankara ADD sure int



3) Bu stunu silmek iin; aadaki kod yazlr ve altrlr.




UYGULAMA:
1) Aadaki kod, "ankara" isimli bir tablo oluturacaktr. Bu oluum srasnda
"kayno" isimli stuna; otomatik olarak artan identity ekleyecektir. Burada balang deeri
"100", art aral "5"dir.



2) Tasarm ksmndaki grnt, aadaki gibi olacaktr.



3)Tabloyu ap iine kayt girmemiz gerekli.
4)Aadaki kod ile benzersiz kayt iin "ifre" isimli bir stun ekleyeceiz.





5) altrp kayt girdiimizde grnt, ekildeki gibi olacaktr. Burada ifre ksmna
veri giremezsiniz. Sadece ad stununa bilgi girip; tabloyu kapatp, tekrar anca ifre
bilgilerini grebilirsiniz veya tablo zerinde sa tua basarak Execute SQL seeneine
tklamamz gerekir.
use karakaya3
ALTER TABLE stanbul DROP column sure
use karakaya3
CREATE TABLE ankara (
Kayno int identity (100,5) not null, ad varchar(15));
CREATE TABLE ankara (sifre uniqueidentifier not null DEFAULT NWEID(),
Ad varchar(15));


6) Bu tabloyu silmek iin, aadaki kod yazlr.

CONSTRANT (ZORUNLU) TANIMLAMALAR:
Veri btnlnn salanmasnda en nemli yaplardan biri de Constraint'lerdir.
Constraint; ANSI standartlar methodudur. ntegrity tiplerine gre, farkl Constraint tipleri
vardr.

ntegrity Tipi Constraint Tipi Aklama
DEFAULT

Bir stuna deer girilmedii zamanlardaki
durumu belirler.

CHECK
Deerlerin stuna uygun olup-olmadn
kontrol eder.
Domain REFERENTAL
Veri deiikliklerinin dier bir tablo ile uyumlu
olarak yaplp-yaplamayacan kontrol eder.


Entity
PRIMARY KEY
UNIQUE
Bo deere izin vermez ve bir satT
deerinin mkerrer olmasn engeller.Bir satr
deeri mkerrer olamaz,ancak bo braklabilir.

Referential
FOREIGN KEY
CHECK
Bir stuna ait deerin ayn veya dier
bir tabloda ayn olup- olmadnkontrol eder.
Ayn tablo iindeki bir stun deeri ile
dier bir stun deerini kontrol eder.

Nasl Oluturulur?
CREATE TABLE veya ALTER TABLE ifadeleri ile oluturulabilir. Yeni oluturulan
veriye eklenebilecei gibi, var olan bir veriye ya da istenirse birden fazla stuna eklenebilir.
Eer sadece bir stuna ekleniyorsa column-levelconstraint, birden fazla stuna ekleniyorsa
table-levelconstraint olarak adlandrlr.
DROP TABLE ankara;
UYGULAMA:
1) Bir tablo olutururken PrimaryKey tanmlamak iin; aadaki kodu SQL Ouery
Editr iine yazarak altralm. Burada oluturulan df_stok_fiyat Constraint'i, Domain tipi
iindeki Default tipe bir rnek tekil etmektedir ve stun deeri bo brakldnda; mutlaka 0
deeri atanmasn kontrol etmektedir. Bir dieri ck_bolumnoise, Domain tipi iindeki Check
tipine girmekte ve buraya girilecek deeri 1 ile 4 arasnda snrlamaktadr. Son Constraint
olan pk_stokise, "stokno" isimli stunu entity tipindeki PrimaryKey yapsn uygulamaktadr.











3) Kodu altrdmzda, ilemin baar ile tamamlandn gsteren aadaki mesaj ile
karlarz.


3) Oluturulan tablonun tasarm ksmna girdiimizde, grnt ekildeki gibi olacaktr.



3) Oluturulan CONSTRAINT'leri grmek iin;






karakaya3
create table stok
(
Stokno int identity(1,1) not null, urunad nvarchar(30) not null, bolumno int null,
fiyat Money null constraint df_stok_fiyat default(0), constraint pk_stok primary key clustered
(stokno), constraint ck_bolumno check (bolumno >0 and bolumno<5));

karakaya3
create table stok
(
Stokno int identity(1,1) not null, urunad nvarchar(30) not null constraint pk_stok primary key
clustered (stokno), urunad nvarchar(30) ,
not null, bolumno int null,
constraint ck_bolumno check (bolumno >0 and bolumno<5),
fiyat Money null constraint df_stok_fiyat default(0));

Karaya3
EXEC sp_help pk_stok sadece belirtilen constraint hakknda bilgi verir.
4)Buradaki tm yaplar grafiksel olarak da oluturabilir veya oluan yaplar grafiksel
olarak grebilirsiniz. imdi burada oluturduumuz yaplar nasl grntleyeceimize
bakalm. stersek kod yazmak yerine grafiksel olarak buralardan da yapabiliriz.
a-stokno stununda tanmlanan bir lndex olduu iin (lndexler hakknda ayrntl bilgiyi
INDEX konumuzda bulabilirsiniz.) zerinde sa tua basarak lndexes/Keys seeneine
tklyoruz.


a) Gelen ekranda tm bilgileri verebilir, gerekirse deiiklik yapabiliriz. Eer kod
yerine, grafiksel olarak oluturmak isteseydik; buraya girerek Addbutonuna basp, gerekli
zellikleri gireceiz.



c)bolum no stunu zerinde sa tua basarak CheckConstraints seeneine tklayalm.




d) Burada kullandmz ifadeyi Expressionksmnda grebilir ve yanndaki
noktaya tklayarak deiiklik yapabiliriz.






e) fiyat stunu seili iken aadaki ColumnPropertiesksmndaki Default Value bu
deer verilebilir. Bo geince otomatik olarak 0 deeri bu stun iin atanacaktr.



4) ekildeki verileri girelim. Dikkat edin, PrimaryKey'e sahip olan stok_no'ya, mkerrer
kayt giremeyeceksiniz. Geri bu stun identity zelliine sahip olduu iin, normal
artlarda da bilgi giremeyeceimizi hatrlatmak isterim. Ayrca bolum no stununa 1
ile 4 aras deer girebilirsiniz. Son kayt girerken fiyat stununa bir ey girmeyelim ve
buraya sfr deerinin otomatik olarak geldiini gzlemleyelim.
DEFAULT CONSTRANT
Evet, bu karmak gibi grnen konuya giri yaptktan sonra, tek tek ve daha detayl
olarak Constraint tiplerini incelemeye devam edelim. Bunlardan ilki olan
DefaultConstraintile bir stuna deer girilmedii zaman, alaca varsaylan deeri
beliriliyoruz. Burada uygulanacak temel zellikleri listeleyelim:
1-Tablo iinde var olan veriyi kontrol eder.
2-Sadece INSERT ifadesi ile uygulanabilir.
3-Her bir stun iin, yalnzca bir adet DefaultConstraint tanmlanabilir.
4-Bir stuna dentity uygulanm ise, bu zellik kullanlamaz.
5-Bir stunun veri tipi Rowversionise, yine bu zellik uygulanamaz.
UYGULAMA
1) Aadaki kod ile df_cinsiyet isimli stun temelli, bir defaultconstraint
tanmlyoruz ve eer buraya deer girilmez ise, ERKEK yazlmasn istiyoruz.








1) Sonuta ilk iki kayt iin bir cinsiyet belirlemememize ramen varsaylan deer
ERKEK olduu iin, bu stun dolu olarak karmza gelir.


use karakaya3
create table eleman
ad varchar(30) not nuil,
cinsiyet varchar(20) not nuli constraint
go
Insert eleman (ad values ('selim')
Insert eleman (ad) values ('zafer')
Insert eleman values !'aye','KADIN')
go
select ' from eleman
2)Aadaki ifade ile daha nce oluturduumuz stok tablosundaki bolum no stununa
deer girilmez ise 1 deerinin atanmasn salyoruz.





CHECK CONSTRANT
CheckConstraint herhangi bir stuna girilecek deer araln belirleyebilecei gibi,
stunlar arasnda da kontrol yapar.
zelliklerini listeleyecek olursak;
1-)INSERT ve UPDATE ifadelerinde her zaman bu kontrol yapar.
2-)Ayn tablo iindeki dier stunlara referans olabilir.
3-)Rovvversion veri tipi ile birlikte kullanlamaz.
4-)Alt sorgulamalar ieremez.
5-)Eer herhangi bir veri; CheckConstraint yapsna uyumsuzluk gsteriyor ise (Bu
nceden girilmi veriler iin geerli olabilir) DBCC CHECKCONSTRAINTS ifadesi ile
kural ineyen satrlar tespit edebilir.

Bu zellik ayn zamanda, SQL Server Management Studio kullanlarak da yaplabilir.
Bunun iin tablonun tasarm ksmnda iken, Fare'nin sa tuuna basp CheckConstraints
seeneine tklamak gerekir. Ardndan gelen ekrann CheckConstraints ksmnda; daha nce
tanmlanmlar girebileceimiz gibi, Add butonunu kullanarak yeni bir tane oluturup,
Expression ksmna gerekli kstlamalar yazlabilir.




use karakaya3
alter table stok
add constraint df_bolurano default(l) for bolumno



UYGULAMA:
1) Aadaki kodu yazalm.








Burada oluturulan CreateConstraint'leri tek tek inceleyelim:
ck_per_sicilno: 5 karakterlik bilgi giriine zorluyor. Yalnz ilk harfi a, ikinci harfi 0 ile 9
arasnda bir rakam ve son harfi ise a- z arasnda bir harf olmak zorunda.
C
k_per_igt: Bu alana yazlan tarihin Aral 1/1/1950yl ile bugn arasnda olmak
zorundadr. Ancak bo da braklabilir.
ck_per_bolum: Bu alana girilecek olan bilgiler mutlaka Muhasebe, Bilgiilem veya Sat
olmak zorundadr. Bo olarak da braklabilir.
2) Kodu altrarak veri girmeye alnz. Eer ekildeki gibi veya benzer veriler girmez
iseniz, hata ile karlaacanz unutmayn.





use karakaya3
CREATEtable personel(
sicilno varchar(5)notnull
constraint ck_per_sicilno Check ([sicilno] like'[a] [0-9] [a-z] [a-
z]'),
isegiristarih datetime
constraint ck_per_igt Check
(isegiristarih >'01/01/1950'and isegiristarih <getdate()),
bolum varchar(15)
constraint ck_per_bolum Check
([bolum] ='Muhasebe'or([bolum] ='Bilgiislem'or [bolum]='Sats')))
3)Aadaki kod ile dier kullanm test edeceiz. Bu kod ile toplam stununa girilecek
deer, mutlaka adet stunu ile fiyat stununun arpm olmas gerekir. Bunun iin ck_hes_toplam
isimli bir CheckConstraint tanmladk.










3) altrdktan sonra tabloya veri girmeye altnz zaman, toplam stununa girilecek deer,
adet ve fiyat stunlarnn arpm olmad takdirde hata ile karlacaksnzdr.

4) Eer var olan bir tabloya CheckConstrain teklenmek istenirse, kodun aadaki gibi
yazlmas gerekir. Tabi ki bunu uygulamak iin daha nceki kaytlar arasnda 0 veya 0 dan
kk deerin fiyat stununda olmamas gerekir.











PRMARY KEY CONSTRANT
PrimaryConstraint, bir tablo iin PrimaryKey(birincil anahtar) tanmlamas yapar
use karakaya3
CREATEtable hesap(
adet intnotnull,
fiyat intnotnull,
toplam intnotnull,
constraint ck_hes_toplam
Check (toplam=adet*fiyat))
use karakaya3
alter table hesap
add constraint ck_hes_fiyat check (fiyat>0)

Not: Eer birden fazla deer atanacak ise araya noktal virgl konulmas gerekir. rnein,
sadece harf ve rakam girilecekse [a-z;0-9] eklinde yazlr.
Tm constraint'ler hakknda bilgi grntlemek iin select sys.sysobjects ifadesinden
yararlanlabilir.
ve bu benzersiz bir kayt girii salar. EntityIntegrity yapsndaki bu Constraint'in temel
zellikleri:
1-) Her bir tablo iin sadece bir PrimaryKeyConstraint olabilir. Bu birden fazla stunu
kapsayabilir.
2-) Buraya girilen deerler, benzersiz olmak zorundadr. Yani, iki ayn deer bu stuna
girilemez.
3-)Bo geie izin vermez. Mutlaka deer girilmesi gerekir.
4-)Belirtilen stun zerinde benzersiz lndex oluturur. Bu index'in tipini Clustered veya
Nonclustere dolarak belirleyebiliriz. Eer hibir belirleme komutu yazmak isek, Default
olarak Clusteredlndex halinde tanmlanr.
5-)Bir PrimaryKeyConstraint'in oluturduu lndex, direkt olarak silinemez, Constraint
silindii zaman silinir.
UYGULAMA:
1) Aadaki yazlm, bundan nce oluturduumuz Hesap tablosunda bulunan adet
stunu iin PrimaryKeyConstraintoluturacaktr.




2) Kodu altrdktan sonra, hesap tablosunun tasarm ksmna girildii zaman grnt
3) Stununun zerinde bir anahtar resmi grlecektir.

SQL Server Management Studio kullanarak, PrimaryKey koyabilir veya kaldrabiliriz.
Bunun iin tasarm ksmnda stun zerinde sa tua basarak, Set PrimaryKey seeneine
tklamamz yeterli olacaktr.
4) Ayarlar iin stunun zerinde Fare'nin sa tuuna basarak
lndexes/Keysseeneine tklamamz yeterli olacaktr.



5)Gelen ekrandaki lndexes/Keys sekmesinde PrimaryKey ile ilgili gerekli ayarlar yapabiliriz.
use karakaya3
altertable hesap
addconstraint pk_hes_adet PrimaryKeynonclustered (adet)



UNOUE CONSTRANT
UniqueConstraint kazandrlm bir stunun ait olduu satra, ayn deeri iki kez
giremeyiz. zellikle PrimaryKey kazandrdmz stun dnda baka bir stunda da
mkerrer kayt girilmesi istenmiyorsa, bu zellik kazandrlabilir. Index zelliine, clustered
veya nonclustere dolarak sahiptir.
Dier temel zellikleri:
1-)Sadece bir kez bo braklmaya izin verir, ikincisine izin vermez.
2-)Bir tablo zerinde birden fazla Uniqueconstraint olabilir.
3-) Bir veya daha fazla stun zerine Uniqueconstraint uygulanmas; tablonun
PrimaryKey'i olmas anlamna ge0lmez.
4-)Benzersiz index oluturmay salar.
UYGULAMA
1) Aadaki yazlm, hesap tablosundaki fiyat stununa UniqueConstraint uygular.
altrdnzda eer hata ile karlarsanz, bu stuna ait bilgileri kontrol ediniz. Mkerrer
kayt varsa deitiriniz.






2) indexes/ Keys seeneine girerek, istediiniz ayarlar verebilir veya
deitirebilirsiniz.
use karakaya3
altertable hesap
addconstraint pk_hes_fiyat Uniquenonclustered (fiyat)


FOREIGN KEY CONSTRANT
ReferentialIntegrity yapsn zorlayan bu Constraint ile ayn veya farkl bir tablodaki
PrimaryKey veya Unique zellii kazandrlm bir stuna rehberlik eder. Yani FOREIGN
KEY Constraint'i kullanabilmek iin ilikilendirilecek stunda mutlaka PrimaryKey veya
UNOUE Constraint olmaldr.
zelliklerini inceleyecek olursak;
1-)Bir veya birden fazla stuna uygulanabilir.
2-)Refrence stunu ile belirlenen stun says ve veri tipi ile ForeignKeyile belirlenen
stun says ve veri tipi mutlaka birbirini karlamaldr.
3-)PrimaryKey veya UniqueConstraint'leri gibi, ForeignKeyConstraint otomatik olarak
index oluturmaz. Ancak veri tabannza birok katlm olacak ise performans ykseltmek
iin manuel olarak index'i oluturabilirsiniz.
4-)ForeignKey ile referans edilmi dier tablolardaki verilerde deiiklik yapabilmek
iin mutlaka SELECT veya REFERENCES iznine sahip olmak gerekir.
5-) Eer ayn tablo iinde bir referans durumu sz konusu ise o zaman REFERENCE
ifadesini tek bana kullanmak yeterlidir. Yani bu durumda FOREIGN KEY ifadesini
kullanmaya gerek yoktur.
UYGULAMA
1) Aadaki tabloyu "depogiris" ad ile oluturunuz, urunkod stunu zerinde sa tua
basarak, Set PrimaryKey seeneine tklaynz. Bylelikle bu stuna PRMARY KEY
Constraint zellii kazandrm oluyorsunuz.

2) ine aadaki kaytlar giriniz.



3) marketsatisi simli, ikinci tablonuzu aadaki ekilde tasarlaynz.


4) Burada depogiris tablomuzu ana tablo, marketsatis tablomuzu ise yavru tablo olarak
kullanacaz. Yani aralarnda urunkod stunlarn kullanarak, FOREIGN KEY Constraint
oluturacaz. lk etapta, ana tablo olan depogiris tablosunda tanml olmayan bir urun
kodunu marketsatis iinde kullanmamz engelleyecektir. nk olmayan mal satamayz
yle deil mi?
Bunun iin aadaki kodu, SQL Server Query Editr iine yazalm.







5) Bu kodun anlamn aklayacak olursak; ana tablo kabul ettiimiz depogiris
tablosundaki
Urunkod stunu ile yavru tablo kabul ettiimiz marketsatis tablosundaki urun
kodstunu arasnda bir kontrol oluturuyoruz. REFERENCES ifadesi ile ana tablo olan
depogiris belirtilirken, FOREIGN KEY ifadesi ile de yavru tablo olan marketsatis belirtiliyor.

6) Kodumuzu altrdmzda aadaki mesaj kyorsa, ilem baar ile tamamlanm
demektir.







7) imdi tablolarmz test edelim. Bunun iin yavru tablomuz olan marketsatis
tablosunu aarak, aadaki kayd girmeye alalm.
use karakaya3
ALTERTABLE marketsatis
ADDCONSTRAINT FK_satis_urunkod
FOREIGNKEY (urunkod)
REFERENCES depogiris(urunkod)
Not: Eer bir hata mesaj ile karlarsanz. Bunun sebebi, yavru tablonuzda koula
uymayan bir kayt var demektir. Onu dzettikten sonra, tekrar komutu altrnz.

Yukardaki kayd girip, bir alt satra gemeye altnzda hata verecektir. nk
urunkod deeri "7" verilmitir. Bizim ana tablomuz olan depogiris tablosunda rn kodlar
"1" ile "4" arasndadr. Onun iin bu kayd kabul etmez.
8) ekildeki kaytlar girelim. Bu kaytlarda hibir problem olmamas gerekir.


9) imdi ana tablomuz olan depogiris tablosunu aarak; 1 olan ilk kaydn deerini 9
yapalm ve tabloyu kaydetmeye alalm. Buna izin vermeyecektir. nk 1 deeri, yavru
tablomuzda kullanlmtr. Yaplan deiiklii kaydetmeden kar. Kullanlmayan bir deeri
deitirebilir veya yeni bir deer ekleyebilirsiniz. Fakat kullanlan bir deeri, varsaylan
ayarlarda deitiremezsiniz. Peki bunu nasl yapacaz?





ESC tuuna basarak deerin ilk haline dnmesini salaynz.
10) Aadaki komutu yazarak, oluturduumuz Constraint'i silelim.




11) altrdktan sonra aadaki mesaj, bu ilemin baar ile gerekletiini
ifade etmektedir.


12) Ana tabloda bir deiiklik yaptmz zaman bununla ilikili olan yavru tablodaki
kaytlarn da otomatik olarak deimesini istiyorsak, CASCADE zelliini dahil ederek ON
UPDATE ifadesini kullanmamz gerekir. ON UPDATE ifadesinin varsaylan zellii NO
ACTlON'dr. Yani, Cascade No Action ile hi yazmamak arasnda bir fark yoktur. Aadaki
rneimizde, ilk kodumuzun sonuna on updatecascade, ifadesini ekledik. Bylelikle ilk
tabloda yaplan deiiklik otomatik olarak ikinci tabloya da etki edecektir.





13) Test etmek iin ana tablomuz olan "depogiris" i aarak, iindeki 1 numaral deere
sahip ilk kayd, 9 olarak deitirelim ve kaydederek kalm.
Bu ilem sonunda hibir hata mesaj ile karlamadnza dikkat ediniz.


14) imdi ikinci tablomuz olan yavruyu yani, "marketsatis" tablosunu aalm. Burada
urunkodu daha nce 1 olarak girilmi tm kaytlarn, otomatikman 9 olarak deitiini
gzlemleyelim.

use karakaya3
alterTABLE marketsatis
dropconstraint FK_satis_urunkod
USE karakaya3
ALTERTABLE marketsatis
ADDCONSTRAINT FK_satis_urunkod
FOREIGNKEY (urunkod)
REFERENCES depogiris(urunkod)onupdatecascade


15) imdi ana tablomuz olan depogiri tablosunu aarak, 9 numara kayd silmeye
alalm. Bu ilem sonunda, karmza gelen iletiim kutusunda Yes butonuna tkladmzda
silme ileminin gereklemediini greceiz.

16) Aadaki komutu yazarak, oluturduumuz Constraint'i silelim.





17) Dier bir CASCADE komutu da DELETE komutudur. Eer bunu aktif hale
getirirsek; ana tabloda bir kad sildiimiz zaman, yavru tablodaki bununla ilikili tm
kaytlarn, otomatik olarak silinmesini salarz. Aadaki kod ile hem update, hem de delete
ifadeleri iin CASCADE komutunu aktif hale getiriyoruz. Delete iin dier parametre, NO
ACTlON'dr ve yazmamakla arasnda hibir fark yoktur. Yani, varsaylan ayardr.







18)imdi ana tablomuz olan depogiris'i ap, 9 numaral urunkoduna sahip kayd silerek,
tablomuzu kapatalm.



19) Yavru tablomuz olan "marketsatis" tablosunu atmz zaman, urunkodu 9
olan tm kaytlarn; otomatik olarak silindiini grebiliriz.


USE karakaya3
alterTABLE marketsatis
dropCONSTRAINT FK_satis_urunkod
USE karakaya3
ALTERTABLE marketsatis
ADDCONSTRAINT FK_satis_urunkod
FOREIGNKEY (urunkod)
REFERENCES depogiris(urunkod)
onupdatecascadeondeletecascade

Bu kontroller ana tablo ile ilgilidir. Yavru tabloda da bir kayd silebilirsiniz veya
ana tabloda var olan bir numara ile deitirebilirsiniz.

20) Aadaki kodu yazarak, FOREIGN KEY Constraint'ioluturmaya alalm.







23) altrdnzda alt ksmda bir hata mesaj ile karlaacaksnz. Bunun sebebi: 8
numaral urunkoduna sahip kayt, kural bozmaktadr. Ancak ben var olan kaytlar kontrol etmesini
istemeyebilirim. Bunun iin Constraint olutururken; WITH NOCHECK ifadesini kullanmamz
gerekir. Eer bu ifadeyi kullanrsak, yavru tablomuzda bulunan nceki kaytlar kontrol
etmeyecektir. Bundan sonra girilen yeni kaytlarda ve eski kaytlar zerinde urunkod stununda bir
deiiklik yaptnz zaman, bu kontrol yapacaktr. WITH CHECK ile hibir ey yazmamak
ayn anlama gelmektedir. Varsaylan deer WITH CHECK komutudur. Bu zellik, ayn zamanda
CHECK Constraint'leri iin de kullanlr.








24) Eer yeni bir veri ekleyecekseniz ve hem FOREIGN KEY, hem de CHECK
Constraint'leri ile yaptnz zorlamalar devre d brakmak istiyorsanz; NOCHECK ifadesini
kullanabilirsiniz. Bunun varsaylan, CHECK ifadesidir.
Bu komut, var olan bir Constraint zerine uygulanaca iin sadece aadaki kodu
yazmanz yeterli olacaktr.







26) iniz bittikten sonra tekrar devreye sokmak iin aadaki kodu
yazmanz yeterli olacaktr.





27)Bu kodu yazp altrdktan sonra, yeni gireceiniz kaytlarda nceki kaytlarda
urunkod zerine yapacanz deiikliklerde, Constraint devreye girecektir.

USE karakaya3
ALTERTABLE marketsatis
ADDCONSTRAINT FK_satis_urunkod
FOREIGNKEY (urunkod)
REFERENCES depogiris(urunkod)
Use karakaya3
ALTERTABLE marketsatis
WITHNOCHECK
ADDCONSTRAINT FK_satis_urunkod
FOREIGNKEY (urunkod)
REFERENCES depogiris(urunkod)
USE karakaya3
ALTERTABLE marketsatis
NOCHECK
CONSTRAINT FK_satis_urunkod
USE karakaya3
ALTERTABLE marketsatis
CHECKCONSTRAINT FK_satis_urunkod



DEFAULT ve RULE
Tablolar ve kullanc tanml veri tipleri iin kullanabileceimiz dier bir yap da
DEFAULT ve RULE tanmlamalardr. Bu konunun son ksmnda ise bu iki yapy
inceleyeceiz.
DEFAULT
Tablolarda bo geilen alanlara zel ifadeler oluturmak iin bu zellikten yararlanlr.
Bu, direkt tabloda bir stuna balanabilecei gibi, tanmlanan kullanc tanml veri tiplerine
de balanabilir. Eer oluturulan bir default yaps; kullanc tanml bir veri tipine balanm
ise o zaman, buraya Default Constrant uygulanamaz.
Default oluturmak iin:



Default oluturduktan sonra bu, bir stun veya kullanc tanml veri tipine
sp_bindefaultsystemstoredprocedure kullanlarak balanr veya balanm bir default,
sp_unbindefaultsystemstoredprocedure kullanlarak kaldrlr.
RULE
Bir stun iin girilecek bilgi eklini kontrol eden tanmlamalar iin Rule oluturulur.
Rule bir stuna veya kullanc tanml veri tipine balanabilir. Bir stuna yalnzca bir adet
Rule balanabilir. Rule oluturmak iin kullanlan format; CREATE RULE rule_adRule'un
bir stuna kod ile balanmas iin; sp_bindrule, balanty kaldrmak iin ise,
sp_unbindrulesystemstoredprocedure' kullanlr.







CREATE DEFAULT default ismi

You might also like