Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
UNIQUE kısıtlamalar ve CHECK kısıtlamalar, SQL Server tablolarında veri bütünlüğünü zorlamak için kullanılabilecek iki tür kısıtlamadır. Bunlar önemli veritabanı nesneleridir.
Bu makale aşağıdaki bölümleri içerir.
BENZERSİz kısıtlamalar
Kısıtlamalar, SQL Server Veritabanı Altyapısı'nın sizin için uyguladığı kurallardır. Örneğin, birincil anahtara katılmayan belirli sütunlara yinelenen değer girilmemiş olduğundan emin olmak için kısıtlamaları kullanabilirsiniz UNIQUE . Hem UNIQUE kısıtlaması hem de PRIMARY KEY kısıtlaması benzersizliği zorlasa da, birincil anahtar olmayan bir sütunun (veya sütunların birleşiminin) benzersizliğini zorlamak istediğinizde UNIQUE kısıtlaması yerine PRIMARY KEY kısıtlamasını kullanın.
Kısıtlamalardan farklı olarak PRIMARY KEY , UNIQUE kısıtlamalar değerine NULLizin verir. Ancak, bir UNIQUE kısıtlamaya katılan tüm değerlerde olduğu gibi sütun başına yalnızca bir null değere izin verilir. Kısıtlamaya UNIQUE bir FOREIGN KEY kısıtlama tarafından başvurulabilir.
Tablodaki mevcut bir sütuna veya sütunlara kısıtlama UNIQUE eklendiğinde, Veritabanı Altyapısı varsayılan olarak tüm değerlerin benzersiz olduğundan emin olmak için sütunlardaki mevcut verileri inceler.
UNIQUE Yinelenen değerleri olan bir sütuna kısıtlama eklenirse, Veritabanı Altyapısı bir hata döndürür ve kısıtlamayı eklemez.
Veritabanı Altyapısı, UNIQUE kısıtlamasının benzersizlik gereksinimini zorlamak için otomatik olarak bir UNIQUE dizin oluşturur. Bu nedenle, yinelenen bir satır ekleme girişiminde bulunulması durumunda Veritabanı Altyapısı kısıtlamanın UNIQUE ihlal edildiğine ilişkin bir hata iletisi döndürür ve satırı tabloya eklemez. Kümelenmiş dizin açıkça belirtilmediği sürece, kısıtlamayı zorlamak UNIQUE için varsayılan olarak benzersiz, kümelenmemiş bir dizin oluşturulur.
CHECK kısıtlamaları
CHECK kısıtlamalar, bir veya daha fazla sütun tarafından kabul edilen değerleri sınırlayarak etki alanı bütünlüğünü zorlar. Mantıksal işleçlere dayalı olarak CHECK veya TRUE döndüren herhangi bir mantıksal (Boole) ifadeyle bir FALSE kısıtlama oluşturabilirsiniz. Örneğin, bir salary sütunun değer aralığı yalnızca 15.000 TL ile 100.000 ABD doları arasında değişen verilere izin veren bir CHECK kısıtlama oluşturularak sınırlanabilir. Bu, maaşların normal maaş aralığının ötesine girılmasını önler. Mantıksal ifade şu şekilde olabilir: salary >= 15000 AND salary <= 100000.
Tek bir sütuna birden çok CHECK kısıtlama uygulayabilirsiniz. Ayrıca, tablo düzeyinde oluşturarak birden çok sütuna tek CHECK bir kısıtlama uygulayabilirsiniz. Örneğin, CHECK kısıtlaması, country_region sütun değeri USA olan herhangi bir satırın state sütununda iki karakterli bir değere sahip olduğunu onaylamak için kullanılabilir. Bu, birden çok koşulun tek bir konumda denetlenmesini sağlar.
CHECK kısıtlamalar, bir sütuna FOREIGN KEY konan değerleri denetledikleri kısıtlamalara benzer. Fark, hangi değerlerin geçerli olduğunu belirleme şeklidir: FOREIGN KEY kısıtlamalar başka bir tablodan geçerli değerlerin listesini alırken, CHECK kısıtlamalar mantıksal ifadedeki geçerli değerleri belirler.
Caution
Örtük veya açık veri türü dönüştürmesi içeren kısıtlamalar belirli işlemlerin başarısız olmasına neden olabilir. Örneğin, bölüm değiştirme kaynağı olan tablolarda tanımlanan bu tür kısıtlamalar bir ALTER TABLE...SWITCH işlemin başarısız olmasına neden olabilir. Kısıtlama tanımlarında veri türü dönüştürme işleminden kaçının.
CHECK kısıtlamalarının sınırlamaları
CHECK kısıtlamalar, FALSE değerine denk gelen değerleri reddeder. Null değerler BİLİNMİYOR olarak değerlendirildiği için, ifadelerde bulunmaları bir kısıtlamayı geçersiz kılabilir. Örneğin, int sütununa MyColumnMyColumn yalnızca 10 (MyColumn=10) değerini içerebilecek bir kısıtlama yerleştirdiğinizden emin olun. değerini NULL içine MyColumneklerseniz, Veritabanı Altyapısı ekler NULL ve hata döndürmez.
Koşulun kontrol edildiği kısıtlama, tablodaki herhangi bir satır için geçerli olmadığında CHECKTRUE döndürür FALSE. Kısıtlama CHECK satır düzeyinde çalışır. Oluşturulan tablonun herhangi bir satırı yoksa, bu tablodaki herhangi bir CHECK kısıtlama geçerli kabul edilir. Bu durum, aşağıdaki örnekte olduğu gibi beklenmeyen sonuçlara neden olabilir.
CREATE TABLE CheckTbl (col1 INT, col2 INT);
GO
CREATE FUNCTION CheckFnctn()
RETURNS INT
AS
BEGIN
DECLARE @retval INT;
SELECT @retval = COUNT(*)
FROM CheckTbl;
RETURN @retval;
END;
GO
ALTER TABLE CheckTbl ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn() >= 1);
GO
Eklenen CHECK kısıtlama, tablosunda CheckTblen az bir satır olması gerektiğini belirtir. Ancak, tabloda bu kısıtlamanın koşulunun denetlendiği satır olmadığından, bu nedenle ALTER TABLE ifadesi başarılı olur.
CHECK kısıtlamaları, DELETE ifadeleri sırasında doğrulanmaz. Bu nedenle, belirli denetim kısıtlaması türlerine sahip tablolarda ifadelerin yürütülmesi DELETE beklenmeyen sonuçlara neden olabilir. Örneğin, CheckTbl tablosunda yürütülen aşağıdaki deyimleri dikkate alın.
INSERT INTO CheckTbl VALUES (10, 10);
GO
DELETE CheckTbl WHERE col1 = 10;
DELETE ifadesi başarılı olur, çünkü CHECK kısıtlaması, tablonun CheckTbl en az 1 satıra sahip olması gerektiğini belirtir.
Note
Tablo çoğaltma için yayımlandıysa, ALTER TABLE veya SQL Server Management Objects (SMO) Transact-SQL deyimini kullanarak şema değişiklikleri yapmanız gerekir. Tablo Tasarımcısı veya Veritabanı Diyagramı Tasarımcısı kullanılarak şema değişiklikleri yapıldığında, tabloyu bırakma ve yeniden oluşturma girişiminde bulunur. Yayımlanan nesneleri bırakamazsınız, bu nedenle şema değişikliği başarısız olur.
İlgili görevler
| Task | Article |
|---|---|
| Benzersiz bir kısıtlamanın nasıl oluşturulacağını açıklar. | Benzersiz kısıtlamalar oluşturma |
| Benzersiz bir kısıtlamanın nasıl değiştirileceği açıklanır. | Benzersiz Kısıtlamaları Değiştir |
| Benzersiz bir kısıtlamanın nasıl silineceği açıklanır. | Benzersiz Kısıtlamaları Sil |
| Denetim kısıtlamasının nasıl oluşturulacağını açıklar. | Kontrol Kısıtlamaları Oluştur |
| Bir çoğaltma aracısı tablonuza veri eklediğinde veya güncelleştirdiğinde denetim kısıtlamasının nasıl devre dışı bırakıldığı açıklanır. | Çoğaltma için Denetim Kısıtlamalarını Devre Dışı Bırakma |
| Tabloya veri eklendiğinde, tabloya güncelleştirildiğinde veya tablodan silindiğinde denetim kısıtlamasının nasıl devre dışı bırakıldığı açıklanır. | INSERT ve UPDATE Deyimleriyle Denetim Kısıtlamalarını Devre Dışı Bırakma |
| Kısıtlama ifadesinin veya belirli koşullar için kısıtlamayı etkinleştiren veya devre dışı bırakmaya yönelik seçeneklerin nasıl değiştirileceği açıklanır. | Kontrol Kısıtlamalarını Değiştir |
| Denetim kısıtlamasının nasıl silineceği açıklanır. | Kontrol Kısıtlamalarını Sil |
| Denetim kısıtlamasının özelliklerini görüntülemeyi açıklar. | Benzersiz Kısıtlamalar ve Denetim Kısıtlamaları |