Aracılığıyla paylaş


TABLOYU column_constraint (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

ALTER TABLE kullanılarak tabloya eklenen yeni sütun tanımının parçası olan BİrİnCİl ANAHTAR, YABANCI ANAHTAR, BENZERSİz veya CHECK kısıtlamasının özelliklerini belirtir.

Transact-SQL söz dizimi kuralları

Syntax

Syntax for SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL database in Microsoft Fabric

[ CONSTRAINT constraint_name ]   
{   
    [ NULL | NOT NULL ]   
    { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        [ WITH FILLFACTOR = fillfactor ]   
        [ WITH ( index_option [, ...n ] ) ]  
        [ ON { partition_scheme_name (partition_column_name)   
            | filegroup | "default" } ]   
    | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name   
            [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )  
}  

Microsoft Fabric Warehouse söz dizimi

[ CONSTRAINT constraint_name ]  
{  
    { PRIMARY KEY | UNIQUE }  
       NONCLUSTERED    
        (column [ ASC | DESC ] [ ,...n ] )  
NOT ENFORCED
    | FOREIGN KEY  
        ( column [ ,...n ] )  
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]  
NOT ENFORCED
}  

Arguments

CONSTRAINT

BİrİnCİl ANAHTAR, BENZERSİz, YABANCI ANAHTAR veya CHECK kısıtlaması için tanımın başlangıcını belirtir.

constraint_name
Kısıtlamanın adıdır. Kısıtlama adları , tanımlayıcıların kurallarına uymalıdır, ancak ad bir sayı işaretiyle (#) başlayamaz. constraint_name sağlanmazsa, kısıtlamaya sistem tarafından oluşturulan bir ad atanır.

NULL | NOT NULL

Sütunun değerleri kabul NULL edip etmeyeceğini belirtir. Değerlere izin NULL verilmeyen sütunlar yalnızca varsayılan olarak belirtilmişse eklenebilir. Yeni sütun değerlere izin veriyorsa NULL ve varsayılan belirtilmemişse, yeni sütun tablodaki her satır için içerir NULL . Yeni sütun değerlere izin veriyorsa NULL ve yeni sütunla birlikte varsayılan bir tanım eklenirse, tablodaki mevcut her satır için varsayılan değeri yeni sütunda depolamak için WITH VALUES seçeneği kullanılabilir.

Yeni sütun değerlere izin NULL vermiyorsa, yeni sütunla bir DEFAULT tanımı eklenmelidir. Yeni sütun, mevcut her satırdaki yeni sütunlarda varsayılan değerle otomatik olarak yüklenir.

Sütunun eklenmesi için tablonun veri satırlarına fiziksel değişiklikler yapılması gerektiğinde (her satıra DEFAULT değerleri eklenmesi gibi), ALTER TABLE çalışırken kilitler tabloda tutulur. Bu, kilit yerindeyken tablonun içeriğini değiştirme özelliğini etkiler. Buna karşılık, değerlere izin veren NULL ve varsayılan değer belirtmeyen bir sütun eklemek yalnızca meta veri işlemidir ve hiçbir kilit içermez.

veya CREATE TABLEkullandığınızdaALTER TABLE, veritabanı ve oturum ayarları sütun tanımında kullanılan veri türünün null atanabilirliğini etkiler ve geçersiz kılar. Veya kullanıcı tanımlı bir veri türü kullanıyorsanız sütunun veri türünün varsayılan null atanabilirliğini kullanmasına izin veren veya olarak NULLNOT NULL her zaman uyumsuz sütunları açıkça tanımlamanızı öneririz. Daha fazla bilgi için bkz. CREATE TABLE.

BİRİNCİL ANAHTAR

Benzersiz bir dizin kullanarak belirtilen sütun veya sütunlar için varlık bütünlüğünü zorlayan bir kısıtlamadır. Her tablo için yalnızca bir BİRİnCİl ANAHTAR kısıtlaması oluşturulabilir.

UNIQUE

Benzersiz bir dizin kullanarak belirtilen sütun veya sütunlar için varlık bütünlüğü sağlayan bir kısıtlamadır.

KÜMELENDİ | KÜMELENMİDİ

BİrİnCİl ANAHTAR veya BENZERSİz kısıtlaması için kümelenmiş veya kümelenmemiş bir dizin oluşturulduğunu belirtir. BİRİnCİl ANAHTAR kısıtlamaları varsayılan olarak KÜMELENDİ olarak ayarlanır. UNIQUE kısıtlamaları varsayılan olarak NONCLUSTERED olarak ayarlanır.

Bir tabloda kümelenmiş kısıtlama veya dizin zaten varsa, CLUSTERED belirtilemez. Bir tabloda kümelenmiş bir kısıtlama veya dizin zaten varsa, BİRİnCİl ANAHTAR kısıtlamaları varsayılan olarak KÜMELENDİSİZ olarak ayarlanır.

ntext, text, varchar(max), nvarchar(max), varbinary(max), xml veya görüntü veri türlerinden oluşan sütunlar dizin için sütun olarak belirtilemez.

Microsoft Fabric Warehouse'da, NONCLUSTERED'in hiçbir etkisi yoktur.

FILLFACTOR = DOLDURUCU ILE

Veritabanı Altyapısı'nın her dizin sayfasının dizin verilerini depolamak için ne kadar dolu olmasını sağlayacağını belirtir. Kullanıcı tarafından belirtilen doldurma faktörü değerleri 1 ile 100 arasında olabilir. Bir değer belirtilmezse, varsayılan değer 0'dır.

Important

PRIMARY KEY veya UNIQUE kısıtlamaları için geçerli olan tek dizin seçeneği olarak belgeleme WITH FILLFACTOR geriye dönük uyumluluk için korunur, ancak gelecek sürümlerde bu şekilde belgelenmez. Diğer dizin seçenekleri ALTER TABLE'un index_option yan tümcesinde belirtilebilir.

ON { partition_scheme_name(partition_column_name) | filegroup | default }

için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.

Kısıtlama için oluşturulan dizinin depolama konumunu belirtir. partition_scheme_name belirtilirse, dizin bölümlenir ve bölümler partition_scheme_name tarafından belirtilen dosya gruplarına eşlenir. Dosya grubu belirtilirse, dizin adlandırılmış dosya grubunda oluşturulur. "Varsayılan" belirtilirse veya AÇICI belirtilmezse, dizin tabloyla aynı dosya grubunda oluşturulur. BİrİnCİl ANAHTAR veya BENZERSİz kısıtlaması için kümelenmiş dizin eklendiğinde AÇILSA, kümelenmiş dizin oluşturulduğunda tablonun tamamı belirtilen dosya grubuna taşınır.

Bu bağlamda, varsayılan, bir anahtar sözcük değildir. Varsayılan dosya grubu için bir tanımlayıcıdır ve ON default veya ON [default]gibi sınırlandırılmalıdır. Varsayılan belirtilirse, QUOTED_IDENTIFIER geçerli oturum için seçeneğiN ON olması gerekir. Bu varsayılan ayardır. Daha fazla bilgi için bkz. SET QUOTED_IDENTIFIER (Transact-SQL).

UYGULANMADI

Microsoft Fabric Warehouse'da birincil anahtar, benzersiz anahtar ve yabancı anahtar kısıtlamaları ZORUNLU DEĞİlDİr. Kısıtlamaların bütünlüğü uygulama tarafından korunmalıdır.

YABANCı ANAHTAR BAŞVURULARı

sütundaki veriler için bilgi tutarlılığı sağlayan bir kısıtlamadır. YABANCI ANAHTAR kısıtlamaları, sütundaki her değerin başvuruda bulunan tabloda belirtilen sütunda mevcut olmasını gerektirir.

schema_name
YABANCı ANAHTAR kısıtlaması tarafından başvurulan tablonun ait olduğu şemanın adıdır.

referenced_table_name
YABANCı ANAHTAR kısıtlaması tarafından başvuruda bulunan tablodur.

ref_column
Yeni FOREIGN KEY kısıtlaması tarafından başvuruda bulunan parantez içindeki bir sütundur.

SILMEDE { EYLEM YOK | ART ARDA | SET NULL | VARSAYıLANI AYARLA }

Bu satırların bilgi ilişkisi varsa ve başvuruda bulunan satır üst tablodan silinirse, tablodaki değiştirilen satırlara hangi eylemin olacağını belirtir. Varsayılan değer EYLEM YOK'dur.

EYLEM YOK
SQL Server Veritabanı Altyapısı bir hata oluşturur ve üst tablodaki satırdaki silme eylemi geri alınır.

CASCADE
Bu satır üst tablodan silinirse, karşılık gelen satırlar başvuran tablodan silinir.

SET NULL
Yabancı anahtarı oluşturan tüm değerler, üst tablodaki karşılık gelen satır silindiğinde olarak ayarlanır NULL . Bu kısıtlamanın yürütülmesi için yabancı anahtar sütunlarının null atanabilir olması gerekir.

VARSAYILANI AYAR
Yabancı anahtarı oluşturan tüm değerler, üst tablodaki karşılık gelen satır silindiğinde varsayılan değerlerine ayarlanır. Bu kısıtlamanın yürütülmesi için tüm yabancı anahtar sütunlarının varsayılan tanımları olmalıdır. Bir sütun null atanabilirse ve açık bir varsayılan değer kümesi yoksa, NULL sütunun örtük varsayılan değeri olur.

Tablo, mantıksal kayıtlar kullanan bir birleştirme yayınına dahil edilecekse CASCADE'i belirtmeyin. Mantıksal kayıtlar hakkında daha fazla bilgi için bkz. İlişkili Satırlarda Yapılan Değişiklikleri Mantıksal Kayıtlarla Gruplandırma.

ON DELETE CASCADE değiştirilmekte olan tabloda bir INSTEAD OF tetikleyici ON DELETE zaten varsa tanımlanamaz.

Örneğin, AdventureWorks2025 veritabanında ProductVendor tablonun tabloyla Vendor bilgi ilişkisi vardır. ProductVendor. VendorID yabancı anahtar öğesine başvurur Vendor. VendorID birincil anahtar.

Tablodaki Vendor bir satırda DELETE deyimi yürütülürse ve için ProductVendorVendorIDbir ON DELETE CASCADE eylemi belirtilirse, Veritabanı Altyapısı tablodaki ProductVendor bir veya daha fazla bağımlı satırı denetler. Varsa, tablodaki ProductVendor bağımlı satırlar, tabloda başvurulacak Vendor satıra ek olarak silinir.

Buna karşılık, EYLEM YOK belirtilirse, Veritabanı Altyapısı bir hata oluşturur ve tabloda buna başvuran en az bir satır olduğunda satırdaki Vendor silme eylemini ProductVendor geri alır.

GÜNCELLEŞTIRMEDE { EYLEM YOK | ART ARDA | SET NULL | VARSAYıLANI AYARLA }

Bu satırlar bilgi ilişkisine sahip olduğunda ve başvuruda bulunan satır üst tabloda güncelleştirildiğinde tablodaki satırlara hangi eylemin olacağını belirtir. Varsayılan değer EYLEM YOK'dur.

EYLEM YOK
Veritabanı Altyapısı bir hata oluşturur ve üst tablodaki satırdaki güncelleştirme eylemi geri alınır.

CASCADE
İlgili satır üst tabloda güncelleştirildiğinde başvuru tablosunda karşılık gelen satırlar güncelleştirilir.

SET NULL
Yabancı anahtarı oluşturan tüm değerler, üst tablodaki karşılık gelen satır güncelleştirildiğinde olarak ayarlanır NULL . Bu kısıtlamanın yürütülmesi için yabancı anahtar sütunlarının null atanabilir olması gerekir.

VARSAYILANI AYAR
Yabancı anahtarı oluşturan tüm değerler, üst tablodaki karşılık gelen satır güncelleştirildiğinde varsayılan değerlerine ayarlanır. Bu kısıtlamanın yürütülmesi için tüm yabancı anahtar sütunlarının varsayılan tanımları olmalıdır. Bir sütun null atanabilirse ve açık bir varsayılan değer kümesi yoksa, NULL sütunun örtük varsayılan değeri olur.

Tablo, mantıksal kayıtlar kullanan bir birleştirme yayınına dahil edilecekse CASCADE'i belirtmeyin. Mantıksal kayıtlar hakkında daha fazla bilgi için bkz. İlişkili Satırlarda Yapılan Değişiklikleri Mantıksal Kayıtlarla Gruplandırma.

GÜNCELLEŞTIRMEDE CASCADE, SET NULL veya SET DEFAULT, değiştirilmekte olan tabloda GÜNCELLEŞTIRMEDE TETIKLEYICI YERİNE zaten varsa tanımlanamaz.

Örneğin, AdventureWorks2025 veritabanında ProductVendor tablonun tabloyla Vendor bilgi ilişkisi vardır. ProductVendor. VendorID yabancı anahtar öğesine başvurur Vendor. VendorID birincil anahtar.

Tablodaki bir satırda Vendor update deyimi yürütülürse ve için ON UPDATE CASCADEProductVendorbir VendorID eylem belirtilirse, Veritabanı Altyapısı tablodaki ProductVendor bir veya daha fazla bağımlı satırı denetler. Varsa, tablodaki ProductVendor bağımlı satır, tabloda başvurulacak Vendor satıra ek olarak güncelleştirilir.

Buna karşılık, EYLEM YOK belirtilirse, Veritabanı Altyapısı bir hata oluşturur ve tabloda buna başvuran en az bir satır olduğunda satırdaki Vendor güncelleştirme eylemini ProductVendor geri alır.

ÇOĞALTMA IÇIN DEĞIL
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.

YABANCı ANAHTAR kısıtlamaları ve CHECK kısıtlamaları için belirtilebilir. Bu yan tümce bir kısıtlama için belirtilirse, çoğaltma aracıları ekleme, güncelleştirme veya silme işlemleri gerçekleştirdiğinde kısıtlama uygulanmaz.

CHECK

Bir sütuna veya sütunlara girilebilen olası değerleri sınırlayarak etki alanı bütünlüğünü zorlayan bir kısıtlamadır.

logical_expression
CHECK kısıtlamasında kullanılan ve DOĞRU veya YANLIŞ döndüren mantıksal bir ifadedir. CHECK kısıtlamalarıyla kullanılan logical_expression başka bir tabloya başvuramaz, ancak aynı tablodaki diğer sütunlara aynı satır için başvurabilir. İfade bir diğer ad veri türüne başvuramaz.

Remarks

YABANCı ANAHTAR veya CHECK kısıtlamaları eklendiğinde, seçenek belirtilmediği sürece WITH NOCHECK tüm mevcut veriler kısıtlama ihlalleri için doğrulanır. Herhangi bir ihlal oluşursa ALTER TABLE başarısız olur ve bir hata döndürülür. Mevcut bir sütuna yeni bİrİnCİl ANAHTAR veya BENZERSİz kısıtlaması eklendiğinde, sütundaki veya sütunlardaki veriler benzersiz olmalıdır. Yinelenen değerler bulunursa ALTER TABLE başarısız olur. BİrİnCİl WITH NOCHECK ANAHTAR veya BENZERSİz kısıtlamalar eklendiğinde bu seçeneğin hiçbir etkisi olmaz.

Her BİRİnCİl ANAHTAR ve BENZERSİz kısıtlaması bir dizin oluşturur. BENZERSİz ve BİRİnCİl ANAHTAR kısıtlamalarının sayısı, tablodaki dizin sayısının 999 kümelenmemiş dizini ve 1 kümelenmiş dizini aşmasına neden olamaz. Yabancı anahtar kısıtlamaları otomatik olarak dizin oluşturmaz. Ancak yabancı anahtar sütunları, bir tablonun yabancı anahtar kısıtlamasını diğer tablodaki birincil veya benzersiz anahtar sütunu veya sütunlarıyla eşleştirerek sorgu birleştirme ölçütlerinde sıklıkla kullanılır. Yabancı anahtar sütunlarındaki bir dizin, Veritabanı Altyapısı'nın yabancı anahtar tablosundaki ilgili verileri hızla bulmasını sağlar.

Examples

Örnekler için bkz . ALTER TABLE (Transact-SQL).