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.
PRIMARY KEY özelliklerini belirtmek için ALTER TABLE kullanın, UNIQUE, FOREIGN KEY, CHECK kısıtlaması veya ALTER TABLE (Transact-SQL) kullanarak tabloya eklediğiniz DEFAULT tanımı.
Transact-SQL söz dizimi kuralları
Syntax
[ CONSTRAINT constraint_name ]
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
(column [ ASC | DESC ] [ ,...n ] )
[ WITH FILLFACTOR = fillfactor
[ WITH ( <index_option>[ , ...n ] ) ]
[ ON { partition_scheme_name ( partition_column_name ... )
| filegroup | "default" } ]
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CONNECTION
( { node_table TO node_table }
[ , {node_table TO node_table }]
[ , ...n ]
)
[ ON DELETE { NO ACTION | CASCADE } ]
| DEFAULT constant_expression FOR column [ WITH VALUES ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
Arguments
CONSTRAINT
, , UNIQUEFOREIGN KEYveya kısıtlaması ya DEFAULTda CHECK için bir PRIMARY KEYtanımın başlangıcını belirtir.
kısıtlama_adı
Kısıtlamanın adı. Kısıtlama adları , tanımlayıcıların kurallarına uymalıdır, ancak ad bir sayı işaretiyle (# ) başlayamaz. sağlamazsanız constraint_name, sistem kısıtlamaya oluşturulan bir ad atar.
BİRİNCİL ANAHTAR
Benzersiz bir dizin kullanarak belirtilen sütun veya sütunlar için varlık bütünlüğünü zorlayan kısıtlama. Her tablo için yalnızca bir PRIMARY KEY kısıtlama oluşturabilirsiniz.
UNIQUE
Benzersiz bir dizin kullanarak belirtilen sütun veya sütunlar için varlık bütünlüğü sağlayan kısıtlama.
KÜMELENDİ | KÜMELENMİDİ
veya UNIQUE kısıtlaması için kümelenmiş veya kümelenmemiş bir dizin oluşturulduğunu PRIMARY KEY belirtir.
PRIMARY KEY kısıtlamalarının varsayılan değeridir CLUSTERED.
UNIQUE kısıtlamalarının varsayılan değeridir NONCLUSTERED.
Bir tabloda kümelenmiş kısıtlama veya dizin zaten varsa belirtemezsiniz CLUSTERED. Bir tabloda kümelenmiş bir kısıtlama veya dizin zaten varsa, PRIMARY KEY kısıtlamalar varsayılan olarak olur NONCLUSTERED.
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 belirtemezsiniz.
sütun
Yeni bir kısıtlamada kullandığınız parantez içinde belirtilen sütun veya sütun listesi.
[ ASC | DESC ]
Tablo kısıtlamalarına katılan sütun veya sütunların sıralanma sırasını belirtir. Varsayılan, artan sıralama düzenidir (ASC).
FILLFACTOR = FILLFACTOR ILE
Database Engine her dizin sayfasının dizin verilerini depolamak için ne kadar dolu olmasını sağlayacağını belirtir. Kullanıcı tarafından belirtilen fillfactor değerleri 1 ile 100 arasında olabilir. Bir değer belirtmezseniz, varsayılan değer olur 0.
Geriye dönük uyumluluk için, bu belgeler veya UNIQUE kısıtlamaları için PRIMARY KEY geçerli olan tek dizin seçeneğini içerirWITH FILLFACTOR = <fillfactor>. Bu söz dizimi gelecek sürümlerde belgelenmez.
öğesinin index_option yan tümcesinde ALTER TABLEdiğer dizin seçeneklerini belirtebilirsiniz.
ON { partition_scheme_name(partition_column_name) | dosya grubu| "default" }
Applies to: SQL Server 2008 (10.0.x) ve sonraki sürümleri.
Kısıtlama için oluşturulan dizinin depolama konumunu belirtir.
partition_scheme_name belirtirseniz, dizin bölümlenir ve bölümler partition_scheme_name belirtilen dosya gruplarına eşlenir.
Dosya grubunu belirtirseniz, dizin adlandırılmış dosya grubunda oluşturulur.
"Varsayılan" belirtirseniz veya hiç belirtmezsenizON, dizin tabloyla aynı dosya grubunda oluşturulur. Veya UNIQUE kısıtlaması için PRIMARY KEY kümelenmiş dizin eklediğinizde belirtirsenizON, 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 "default" veya ON[default] gibi ON sınırlandırılmalıdır.
"Varsayılan" seçeneğini belirtirseniz, seçeneğin QUOTED_IDENTIFIER geçerli oturum için olması ON gerekir. Bu varsayılan ayardır.
YABANCı ANAHTAR BAŞVURULARı
Sütundaki veriler için bilgi tutarlılığı sağlayan kısıtlama.
FOREIGN KEY kısıtlamalar, sütundaki her değerin başvuruda bulunılan tabloda belirtilen sütunda mevcut olmasını gerektirir.
referenced_table_name
Kısıtlama tarafından başvuruda bulunan FOREIGN KEY tablo.
ref_column
Yeni FOREIGN KEY kısıtlama tarafından başvuruda bulunan parantez içindeki sütun veya sütun listesi.
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 silerseniz, tablodaki satırlara hangi eylemin olacağını belirtir. Varsayılan değer: NO ACTION.
EYLEM YOK
SQL Server Database Engine bir hata oluşturur ve üst tablodaki satırdaki silme eylemini geri alır.
CASCADE
Bu satırı üst tablodan silerseniz başvuran tablodan ilgili satırları siler.
SET NULL
Üst tablodaki ilgili satırı sildiğinizde yabancı anahtarı NULL oluşturan tüm değerleri olarak ayarlar. Bu kısıtlamanın yürütülmesi için yabancı anahtar sütunlarının null atanabilir olması gerekir.
VARSAYILANI AYAR
Üst tabloda karşılık gelen satırı sildiğinizde yabancı anahtarı oluşturan tüm değerleri varsayılan değerlerine ayarlar. 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.
Tablonun mantıksal kayıtlar kullanan bir birleştirme yayınına eklenip eklenmediğini belirtmeyin CASCADE . 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.
Değiştirdiğiniz tabloda zaten bir INSTEAD OF tetikleyici ON DELETE olup olmadığını tanımlayamazsınızON DELETE CASCADE.
Örneğin, AdventureWorks2025 veritabanında ProductVendor tablonun tabloyla Vendor bilgi ilişkisi vardır. Yabancı ProductVendor.VendorID anahtar birincil anahtara başvurur Vendor.VendorID .
Vendor tablosundaki bir satırda DELETE deyimi yürütür ve ProductVendor.VendorID için bir ON DELETE CASCADE eylemi belirtirseniz, Database Engine ProductVendor tablosundaki 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, NO ACTION belirtirseniz, Database Engine bir hata oluşturur ve ProductVendor tablosunda buna başvuran en az bir satır olduğunda Vendor satırında silme eylemini 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 üst tabloda başvuruda bulunan satırı güncelleştirdiğinizde tablodaki satırlara hangi eylemin olacağını belirtir. Varsayılan değer: NO ACTION.
EYLEM YOK
Database Engine 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
Üst tablodaki ilgili satırı güncelleştirdiğinizde yabancı anahtarı NULL oluşturan tüm değerleri olarak ayarlar. 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.
Tablonun mantıksal kayıtlar kullanan bir birleştirme yayınına eklenip eklenmediğini belirtmeyin CASCADE . 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 UPDATE CASCADE, SET NULLveya SET DEFAULT değiştirilmekte olan tabloda bir INSTEAD OF tetikleyici ON UPDATE zaten varsa tanımlanamaz.
Örneğin, AdventureWorks2025 veritabanında ProductVendor tablonun tabloyla Vendor bilgi ilişkisi vardır. Yabancı ProductVendor.VendorID anahtar birincil anahtara başvurur Vendor.VendorID .
Vendor tablosundaki bir satırda UPDATE deyimi yürütür ve ProductVendor.VendorID için bir ON UPDATE CASCADE eylemi belirtirseniz, Database Engine ProductVendor tablosundaki bir veya daha fazla bağımlı satırı denetler. Varsa, tablodaki ProductVendor bağımlı satır ve tabloda başvuruda bulunılan Vendor satır güncelleştirilir.
Buna karşılık, NO ACTION belirtirseniz, Database Engine bir hata oluşturur ve ProductVendor tablosunda başvuruda bulunan en az bir satır olduğunda Vendor satırındaki güncelleştirme eylemini geri alır.
ÇOĞALTMA IÇIN DEĞIL
Applies to: SQL Server 2008 (10.0.x) ve sonraki sürümleri.
Bir kısıtlama için bu yan tümceyi belirtirseniz, çoğaltma aracıları yazma işlemleri gerçekleştirirken kısıtlamayı zorlamaz. Kısıtlamalar ve CHECK kısıtlamalar için FOREIGN KEY bu yan tümceyi belirtebilirsiniz.
BAĞLANTI
Verilen kenar kısıtlamasının bağlanmasına izin verilen düğüm tablo çiftini belirtir.
ON DELETE kenar tablosunun bağlandiği düğümler silindiğinde kenar tablosundaki satırlara ne olacağını belirtir.
DEFAULT
Sütun için varsayılan değeri belirtir. Mevcut veri satırlarında yeni bir sütun için değerler sağlamak için tanımları kullanın DEFAULT .
Zaman damgası veri türüne, özelliğe, IDENTITY var olan DEFAULT bir tanıma veya bağlı varsayılana sahip sütunlara tanım ekleyemezsinizDEFAULT. Sütunun varsayılanı varsa, yeni bir varsayılan ekleyebilmeniz için önce varsayılanı bırakmanız gerekir. Kullanıcı tanımlı tür sütunu için varsayılan bir değer belirtirseniz, türün constant_expression kullanıcı tanımlı türe örtük dönüştürmeyi desteklemesi gerekir. SQL Server önceki sürümleriyle uyumluluğu korumak için bir DEFAULT kısıtlama adı atayabilirsiniz.
constant_expression
Varsayılan sütun değeri olarak kullandığınız değişmez değer, NULLbir veya sistem işlevi. Microsoft .NET Framework kullanıcı tanımlı türünde tanımlanmış bir sütunla birlikte constant_expression kullanırsanız, türün uygulanması constant_expression kullanıcı tanımlı türe örtük dönüştürmeyi desteklemelidir.
FOR sütunu
Tablo düzeyi DEFAULT tanımıyla ilişkili sütunu belirtir.
DEĞERLERLE
Sütun ve
DEFAULTkısıtlama eklediğinizde, sütun null değerlerine izin veriyorsa, kullanarakWITH VALUESyeni sütunun var olan satırlar için değerini constant_expression'deDEFAULTverilen değere ayarlar.Eklediğiniz sütun null değere izin vermiyorsa, sütunun var olan satırlar için değeri her zaman sabit ifadede
DEFAULTverilen değere ayarlanır.
SQL Server 2012 ve sonraki sürümlerinde bu işlem, adding-not-null-columns-as-an-online-operation bir meta veri işlemi olabilir.
İlişkili sütun da eklenmediğinde kullanırsanız WITH VALUES , bunun hiçbir etkisi olmaz.
CHECK
Bir sütuna veya sütunlara girilebilen olası değerleri sınırlayarak etki alanı bütünlüğünü zorlayan bir kısıtlama.
logical_expression
veya FALSEdöndüren TRUE bir CHECK kısıtlamada kullanılan mantıksal ifade.
kısıtlamalarlaCHECK kullanılan logical_expression başka bir tabloya başvuramaz, ancak aynı satır için aynı tablodaki diğer sütunlara başvurabilir. İfade diğer ad veri türüne başvuramaz.
Remarks
Veya CHECK kısıtlamaları eklediğinizdeFOREIGN KEY, siz seçeneği belirtmediğiniz WITH NOCHECK sürece sistem tüm mevcut verileri kısıtlama ihlallerine karşı denetler. Herhangi bir ihlal oluşursa, ALTER TABLE başarısız olur ve bir hata döndürür. Mevcut bir sütuna yeni PRIMARY KEY veya UNIQUE kısıtlama eklediğinizde, sütun veya sütunlardaki veriler benzersiz olmalıdır. Yinelenen değerler bulunursa başarısız ALTER TABLE olur.
WITH NOCHECK veya UNIQUE kısıtlamaları eklediğinizde PRIMARY KEY seçeneğin hiçbir etkisi olmaz.
Her PRIMARY KEY ve UNIQUE kısıtlaması bir dizin oluşturur. ve PRIMARY KEY kısıtlamalarının UNIQUE 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, bir tablonun yabancı anahtar kısıtlamasında yer alan sütun veya sütunları diğer tablodaki birincil veya benzersiz anahtar sütunu veya sütunlarıyla eşleştirerek sorgulardaki birleştirme ölçütlerinde yabancı anahtar sütunlarını sık sık kullanırsınız. Yabancı anahtar sütunlarındaki dizin, Database Engine yabancı anahtar tablosundaki ilgili verileri hızla bulmasını sağlar.
SQL Server 2022 (16.x) ve sonraki sürümlerinde, devam ettirilebilen işlemler birincil anahtar ve benzersiz anahtar kısıtlamaları için tablo kısıtlamaları eklemeyi destekler. Devam ettirilebilen ALTER TABLE ADD CONSTRAINT işlemleri etkinleştirme ve kullanma hakkında daha fazla bilgi için bkz. Devam ettirilebilir tablo ekleme kısıtlamaları.
Microsoft Fabric'deki ambar, ADD veya DROPPRIMARY KEY, UNIQUE ve FOREIGN_KEY sütun kısıtlamalarını destekler, ancak yalnızca NOT ENFORCED seçeneğini belirtirseniz. Microsoft Fabric ambarı diğer tüm ALTER TABLE işlemlerini engeller.
Examples
Örnekler için bkz. ALTER TABLE (Transact-SQL).