CONSTRAINT Yan Tümcesi

kısıtlama, başka bir tabloyla bir ilişki oluşturmak için de kullanılabilir olmakla birlikte, bir dizine benzer.

Kısıtlama oluşturmak veya silmek için ALTER TABLE ve CREATE TABLE deyimlerinde CONSTRAINT yan tümcesini kullanırsınız. İki tür CONSTRAINT yan tümcesi vardır: tek bir alanda kısıtlama oluşturmak için ve birden çok alanda kısıtlama oluşturmak için.

Not: Microsoft Access veritabanı altyapısı, Microsoft Access dışındaki veritabanları için CONSTRAINT veya veri tanımlama dili ifadelerinden herhangi birinin kullanımını desteklemez. Bunlar yerine DAO Oluşturma yöntemlerini kullanabilirsiniz.

Söz dizimi

Tek alanlı kısıtlama:

CONSTRAINT ad {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES yabancıtablo [(yabancıalan1, yabancıalan2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Çok alanlı kısıtlama:

CONSTRAINT ad
{PRIMARY KEY (birincil1[, birincil2 [, ...]]) |
UNIQUE (benzersiz1[, benzersiz2 [, ...]]) |
NOT NULL (nulldeğil1[, nulldeğil2 [, ...]]) |
FOREIGN KEY [NO INDEX] (başv1[, başv2 [, ...]]) REFERENCES yabancıtablo [(yabancıalan1 [, yabancıalan2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

CONSTRAINT yan tümcesinin bölümleri:

Bölüm

Açıklama

ad

Oluşturulacak kısıtlamanın adı.

birincil1, birincil2

birincil anahtar olarak belirlenecek alanın veya alanların adı.

benzersiz1, benzersiz2

Benzersiz anahtar olarak belirlenecek alanın veya alanların adı.

nulldeğil1, nulldeğil2

Yalnızca Null olmayan değerleri kabul eden alanın veya alanların adı.

başv1, başv2

Başka bir tablodaki alanlara başvuruda bulunan bir yabancı anahtar alanı veya alanlarının adı.

yabancıtablo

yabancıtablonun belirttiği alanı veya alanları içeren yabancı tablonun adı.

yabancıalan1, yabancıalan2

yabancıtablodaki başv1, başv2 değerlerinin belirttiği alanın veya alanların adı. Başvurulan alan yabancıtablonun birincil anahtarı ise bu yan tümceyi atlayabilirsiniz.


Notlar

Alanın veri türü belirtiminin hemen ardından gelen ALTER TABLE veya CREATE TABLE deyiminin alan tanımı yan tümcesinde tek alanlı kısıtlama söz dizimini kullanırsınız.

özel amaçlı sözcük CONSTRAINT'i, ALTER TABLE veya CREATE TABLE deyimindeki bir alan tanımı yan tümcesi dışında kullandığınız her durumda çok alanlı kısıtlama kullanırsınız.

CONSTRAINT kullanarak bir alanı aşağıdaki kısıtlama türlerinden birine ayarlayabilirsiniz:

  • Alanı benzersiz anahtar olarak belirlemek için UNIQUE özel amaçlı sözcüğünü kullanabilirsiniz. Bu durumda, tablodaki hiçbir kaydın bu alanda birbirleriyle aynı değeri olamaz. Her alanı veya alan listesini benzersiz olarak kısıtlayabilirsiniz. Çok alanlı kısıtlama bir benzersiz anahtar olarak belirlendiyse, iki veya daha çok kayıt alanlardan sadece birinde aynı değeri içerse bile dizindeki tüm alanların birleştirilmiş değerleri benzersiz olmalıdır.

  • Tablodaki bir alanı veya alan kümesini birincil anahtar olarak belirlemek için PRIMARY KEY özel amaçlı sözcüğünü kullanabilirsiniz. Birincil anahtardaki tüm değerler benzersiz olmalı ve Null olmamalıdır. Bir tablonun yalnızca bir birincil anahtarı olabilir.

    Not: Zaten birincil anahtarı olan bir tabloda PRIMARY KEY kısıtlaması ayarlamayın. Ayarlarsanız bir hata oluşur.

  • Bir alanı yabancı anahtar olarak belirlemek için FOREIGN KEY özel amaçlı sözcüklerini kullanabilirsiniz. Yabancı tablonun birincil anahtarı birden çok alandan oluşuyorsa çok alanlı kısıtlama tanımı kullanmanız ve başvuruda bulunan tüm alanları, yabancı tablonun adını ve yabancı tablodaki başvurulan alanların adlarını, başvuruda bulunan alanlar ile aynı sırada listelemeniz gerekir. Başvurulan alan veya alanlar yabancı tablonun birincil anahtarı ise başvurulan alanları belirtmeniz gerekmez. Veritabanı altyapısı, yabancı tablonun birincil anahtarının başvurulan alanlar olduğunu varsayar.

    Yabancı anahtar kısıtlamaları, karşılık gelen bir birincil anahtar değeri değiştiğinde gerçekleştirilecek belirli eylemleri tanımlar:

  • CONSTRAINT'in tanımlandığı tabloda bulunan bir birincil anahtar üzerinde gerçekleştirilen eylemi temel alarak yabancı tabloda gerçekleştirilecek eylemleri belirtebilirsiniz. Örneğin, Customers tablosuna yönelik aşağıdaki tanıma göz atın:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Orders tablosunun aşağıdaki tanımı, Customers tablosunun birincil anahtarına başvuruda bulunan bir yabancı anahtar ilişkisini tanımlar:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Yabancı anahtarda hem bir ON UPDATE CASCADE yan tümcesi hem de bir ON DELETE CASCADE yan tümcesi tanımlanır. ON UPDATE CASCADE yan tümcesi, Customer tablosunda bir müşterinin tanımlayıcısı (CustId) güncelleştirilirse, bu güncelleştirmenin Orders tablosu boyunca uygulanacağı anlamına gelir. Karşılık gelen bir müşteri tanımlayıcı değeri içeren her sipariş otomatik olarak yeni değere güncelleştirilir. ON DELETE CASCADE yan tümcesi, Customer tablosundan bir müşteri silinirse, Orders tablosundaki aynı müşteri tanımlayıcı değerini içeren tüm satırların da silineceğini anlamına gelir.

Orders tablosunun aşağıdaki farklı tanımı CASCADE eylemi yerine SET NULL eylemini kullanır:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

ON UPDATE SET NULL yan tümcesi, Customer tablosunda bir müşterinin tanımlayıcısı (CustId) güncelleştirilirse, Orders tablosundaki karşılık gelen yabancı anahtar değerlerinin otomatik olarak NULL durumuna ayarlanacağı anlamına gelir. Benzer şekilde, ON DELETE SET NULL yan tümcesi, Customer tablosundan bir müşteri silinirse, Orders tablosundaki karşılık gelen tüm yabancı anahtarların otomatik olarak NULL durumuna ayarlanacağı anlamına gelir.

Yabancı anahtarlar için otomatik olarak dizin oluşturulmasını engellemek için NO INDEX değiştiricisi kullanılabilir. Bu yabancı anahtar tanım formu yalnızca sonuç dizin değerlerinin sık yineleneceği durumlarda kullanılmalıdır. Yabancı anahtar dizinindeki değerlerin sık yinelendiği durumlarda dizin kullanmak, bir tablo taraması gerçekleştirmekten daha az verimli olabilir. Satırların tabloya eklenip silindiği bu türde bir dizini tutmak performansı düşürür ve herhangi bir avantaj sağlamaz.



Office yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Office Insider Programına Katılın

Bu bilgi yararlı oldu mu?

Görüşleriniz için teşekkür ederiz!

Geri bildiriminiz için teşekkürler! Office destek temsilcilerimizden biriyle görüşmeniz yararlı olabilir.

×