Aracılığıyla paylaş


Veri bütünlük kısıtlamalarını basamaklama

Geçişli başvurusal bütünlük kısıtlamaları'nı kullanarak, eylemler tanımlayabilirsiniz, SQL Server bir kullanıcı hangi varolan yabancı anahtarları noktasına anahtar silmek veya açmaya çalıştığında alır.

BAŞVURULAR yan tümceleri'nın TABLO OLUŞTURMA and TABLO DEĞİŞTİRME ifadeleri ON DELETE ve ON UPDATE yan tümceleri destekler.Basamaklı eylemleri de kullanılarak tanımlanabilir Yabancı anahtar ilişkileri iletişim kutusu:

  • ÜZERİNDE {} SİLMEEYLEM YOK | CASCADE | NULL küme | küme DEFAULT}]

  • ÜZERİNDE {} GÜNCELLEŞTİREYLEM YOK | CASCADE | NULL küme | küme DEFAULT}]

ON DELETE veya ON UPDATE belirtilmezse, HIÇBIR EYLEM varsayılandır.

  • ÜZERİNDE EYLEM SİLİN...
    Varolan satırların diğer tablolardaki yabancı anahtarları tarafından başvuruda bulunulan bir anahtara sahip bir satır silmek için denemesi yapılırsa, bir hata ortaya çıkar ve DELETE deyim döndürülüyor belirtir.

  • ÜZERİNDE EYLEM GÜNCELLEŞTİR
    Bir anahtar değeri, anahtarı, varolan satırların diğer tablolardaki yabancı anahtarları tarafından başvuruda bulunulan bir satırda güncelleştirme denemesi yapılırsa, bir hata ortaya çıkar ve UPDATE deyiminin döndürülüyor belirtir.

CASCADE, küme NULL ve küme DEFAULT tablo için geri izlenebilir yabancı anahtar ilişkileri için tanımlanan s etkilemek için silme veya anahtar değerleri, güncelleştirmeler için izin tablo üzerinde değişiklik gerçekleştirildiği.Geçişli başvurusal eylemleri de hedef tablo üzerinde tanımlanmış, belirtilen basamaklı eylemleri, silinen veya güncelleştirilen satırları için de geçerlidir.CASCADE belirtilemez, herhangi bir yabancı anahtarları veya olan birincil anahtar için bir timestamp sütun.

  • ÜZERİNDE SİLME ART ARDA SIRALI
    Varolan satırların diğer tablolardaki yabancı anahtarları tarafından başvuruda bulunulan bir anahtara sahip bir satır silmek için bir girişimde duruma getirildiyse, bu yabancı anahtarlar içeren tüm satırları da silineceğini belirtir.

  • ÜZERİNDE GÜNCELLEŞTİRME ART ARDA SIRALI
    Burada anahtar değeri varolan satırları diğer tablolardaki yabancı anahtarları tarafından başvuruda bulunulan, satır, bir anahtar değerini güncelleştirmek için denemesi yapılırsa, yabancı anahtar oluşturan tüm değerleri aynı zamanda yeni anahtar için belirtilen değere güncelleştirilmediğini belirtir.

    Not

    CASCADE belirtilemez bir timestamp sütun veya yabancı anahtar, hem de başvurulan anahtar'nın bir parçasıdır.

  • SİLME null küme
    Varolan satırların diğer tablolardaki yabancı anahtarları tarafından başvuruda bulunulan bir anahtara sahip bir satır silmek için denemesi yapılırsa, başvurulan satırlardaki yabancı anahtar oluşturan tüm değerleri değeri NULL olarak küme belirtir.Tüm yabancı anahtar sütunları hedefinin tablo yürütmek bu sınırlama null olmalıdır.

  • GÜNCELLEŞTİRMENİN null küme
    Varolan satırları diğer tablolardaki yabancı anahtarları tarafından başvuruda bulunulan bir anahtara sahip bir satır güncelleştirme denemesi yapılırsa, başvurulan satırlardaki yabancı anahtar oluşturan tüm değerleri belirtir küme için NULL.Tüm yabancı anahtar sütunları hedefinin tablo yürütmek bu sınırlama null olmalıdır.

  • ÜZERİNDE küme VARSAYILAN SİLİN...
    Varolan satırların diğer tablolardaki yabancı anahtarları tarafından başvuruda bulunulan bir anahtara sahip bir satır silmek için denemesi yapılırsa, başvurulan satırlardaki yabancı anahtar oluşturan tüm değerler varsayılan değerlerine küme belirtir.Tüm yabancı anahtar sütunları hedefinin tablo bu sınırlama, yürütmek varsayılan bir tanımı olmalıdır.Bir sütuna NULL hiçbir açık varsayılan değer küme ise, NULL sütunun örtülü bir varsayılan değer olur.ON DELETE küme DEFAULT nedeniyle ayarlanan nonnull değerleri karşılık gelen değerlerin olmalıdır birincil tablo yabancı anahtar kısıtlamasını geçerliliği korumak için.

  • ÜZERİNDE küme VARSAYILAN GÜNCELLEŞTİRİLİR.
    Varolan satırları diğer tablolardaki yabancı anahtarları tarafından başvuruda bulunulan bir anahtara sahip bir satır güncelleştirme denemesi yapılırsa, başvurulan satırlardaki yabancı anahtar oluşturan tüm değerleri, varsayılan değer olarak ayarlandığını belirtir.Tüm yabancı anahtar sütunları hedefinin tablo bu sınırlama, yürütmek varsayılan bir tanımı olmalıdır.Bir sütuna NULL hiçbir açık varsayılan değer küme ise, NULL sütunun örtülü bir varsayılan değer olur.küme UPDATE ON DEFAULT nedeniyle küme olan tüm null olmayan değerler birincil ilgili değerleri olmalıdır tablo yabancı anahtar kısıtlamasını geçerliliği korumak için.

Göz önünde bulundurun FK_ProductVendor_Vendor_VendorID sınırlamaPurchasing tablo in AdventureWorks. Bu sınırlama, gelen bir yabancı anahtar ilişkisi kurar VendorID sütunProductVendor tablo to the VendorID birincil anahtar sütunu Purchasing.Vendor tablo.DELETE CASCADE için kısıtlama belirtilirse satır silme Satıcı where VendorID üç satır eşittir 100 da silerProductVendor where VendorID 100'e eşittir.ON UPDATE CASCADE için kısıtlama belirtilirse, güncelleştirme VendorID değerindeSatıcı tabloya 100'den 155 de güncelleştirir.VendorID üç satır değerleriProductVendor whose VendorID şu anda eşit 100 değerleri.

DELETE CASCADE bir ıNSTEAD OF DELETE tetikleyici içeren bir tablo için belirtilemez.ıNSTEAD OF UPDATE Tetikleyicileri olan tablolar için aşağıdaki tarif edilemez: DELETE küme NULL, ON DELETE küme DEFAULT ON UPDATE CASCADE, ON UPDATE küme NULL ve ON, küme UDATE DEFAULT.

Birden çok geçişli Eylemler

Tek bir DELETE veya UPDATE deyimi, bir dizi geçişli başvurusal başlatabilirsiniz.Örneğin, bir veritabanı, üç tablo içerir: TableA, TableB, and TableC.Bir yabancı anahtar olarak TableB birincil anahtar karşı ON DELETE CASCADE ile tanımlanırTableA.Bir yabancı anahtar olarak TableC birincil anahtar karşı ON DELETE CASCADE ile tanımlanırTableB.DELETE deyim satırlar'ı silerse TableA, işlemi de tüm satırları siler.TableB silinen birincil anahtarlarında eşleşen yabancı anahtarları olanTableAve tüm satırları siler.TableC silinen birincil anahtarlarında eşleşen yabancı anahtarları olanTableB.

Tek bir DELETE veya UPDATE tarafından tetiklendi geçişli başvurusal eylemleri dizi döngüsel başvuru içeren bir ağaç oluşturması gerekir.Birden fazla tablo görünebilir saat, DELETE veya UPDATE'den kaynaklanan tüm geçişli başvurusal eylemler listesinde.Ayrıca, geçişli başvurusal eylemleri ağacının herhangi bir belirtilen birden çok yol olmamalıdır tablo.Tablo NO eylem, belirtilmedi veya varsayılan karşılaştığında bir dalı sonlandırılır.

Tetikleyicileri ve geçişli veri Eylemler

Geçişli başvurusal eylemleri, aşağıdaki şekilde SONRA UPDATE'ı veya SONRA DELETE Tetikleyicileri harekete:

Doğrudan özgün bir DELETE veya UPDATE neden olduğu tüm geçişli başvurusal eylemleri ilk olarak gerçekleştirilir.

Varsa SONRA etkilenen tabloları üzerinde tanımlı Tetikleyicileri, tüm eylemleri ardarda bu Tetikleyicileri yangın gerçekleştirdi.Bu tetikleyici, geçişli eylem ters sırada ateşlenmesine.Tek bir tabloda birden fazla tetikleyicisi varsa, tablo için ayrılmış bir ilk veya son tetikleyicisi olmadıkça, rasgele sırada ateşlenmesine.Bu olarak sıradır kullanarak belirtildi. sp_settriggerorder.

Birden çok geçişli zincirlerini kaynaklanan, tablo, doğrudan bir UPDATE hedefi olan veya DELETE işlemi, bu zincirlerini ilgili, Tetikleyicileri harekete, sipariş belirtilmezse.Ancak, başka bir zincir firing başlamadan önce bir zincir her zaman tüm Tetikleyicileri harekete.

Üzerinde bir AFTER tetikleyicisi tablo, doğrudan hedefi bir UPDATE veya DELETE işlemi geçirilir bakılmaksızın, tüm satırlar mı yoksa etkilenir.Bu durumda ardarda tarafından etkilenen diğer tablo yok.

Önceki Tetikleyicileri birini gerçekleştirirseniz, UPDATE veya DELETE işlemi diğer tablolarda bu eylemleri olabilir ikincil basamaklı zincirlerini başlatın.Bu ikincil zincirlerini işlenmesi için her bir UPDATE veya DELETE işlemi aynı anda, tüm tüm birincil zincirlerini yangın tetikler.Bu işlem, UPDATE veya DELETE sonraki işlemler için Yinelenen yinelemeli olabilir.

CREATE, ALTER, DELETE veya diğer veri tanımlama dili (DDL) işlemlerini Tetikleyiciler içinde DDL Tetikleyicileri ateşlenmesine neden olabilir.Bu, daha sonra ek basamaklı zincirlerini ve Tetikleyicileri DELETE veya UPDATE işlemleri gerçekleştirebilir.

Belirli bir basamaklı başvuru eylem zincir içinde bir hata oluşturursa, bir hata ortaya çıkar, bu zincirdeki ve SILME hiçbir AFTER Tetikleyicileri harekete veya zincirdeki oluşturulan UPDATE işlemi geri alınıyor.

A tablo bir INSTEAD OF olan tetikleyicisi ayrıca basamaklı bir eylem belirten BAşVURULAR yan tümceni içeremez.Ancak bir AFTER tetikleyicisi basamaklı bir eylemle hedef tablodaki INSERT, UPDATE veya DELETE deyim, başka bir tablo veya Görünüm, o nesne üzerinde tanımlanmış bir INSTEAD OF tetiği harekete çalıştırabilirsiniz.

Veri sınırlamaları katalog bilgileri basamaklama

Sorgulama sys.foreign_keys Katalog görünümü, yabancı anahtar için belirtilen geçişli başvurusal kısıtlama gösteren aşağıdaki değerleri döndürür.

Değer

Açıklama

0

EYLEM YOK

1

ART ARDA SIRALI

2

null küme

3

KÜME VARSAYILAN

The UPDATE_RULE and DELETE_RULE columns returned by sp_fkeys and sp_foreignkeys return 0 when CASCADE, küme NULL, or küme DEFAULT is specified; and return 1 when NO eylem is specified or is the default.

Yabancı anahtar oyununun amacı, belirtilen sp_help, çıkış sonucu küme aşağıdaki sütunları içerir.

Sütun adı

Veri türü

Açıklama

Ancak, yalnızca geçerli kapsamdaki SCOPE_IDENTITY döndürür; @@ IDENTITY belirli bir kapsama ile sınırlı değildir.

nvarchar(9)

Silme eylem CASCADE, küme NULL, küme DEFAULT., NO eylem veya N/A (geçerli değil) olup olmadığını gösterir.

Bu işlev, uzak veya bağlı sunucular için uygulanamaz.

nvarchar(9)

Güncelleştirme eylemini CASCADE, küme NULL, küme DEFAULT., NO eylem veya N/A (geçerli değil) olup olmadığını gösterir.