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 Database
Azure SQL Managed Instance
Microsoft Fabric'te
DepoMicrosoft Fabric'te SQL veritabanı
ALTER TABLE kullanılarak tabloya eklenen BİrİnCİl ANAHTAR, BENZERSİz, YABANCI ANAHTAR, CHECK kısıtlaması veya DEFAULT tanımının özelliklerini belirtir.
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
BİrİnCİl ANAHTAR, BENZERSİz, YABANCI ANAHTAR veya CHECK kısıtlaması ya da DEFAULT için bir 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.
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.
column
Yeni bir kısıtlamada kullanılan parantez içinde belirtilen sütun veya sütun listesidir.
[ ASC | DESC ]
Tablo kısıtlamalarına katılan sütun veya sütunların sıralanma sırasını belirtir. Varsayılan değer ASC'dir.
FILLFACTOR =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 fillfactor değerleri 1 ile 100 arasında olabilir. Bir değer belirtilmezse, varsayılan değer 0'dır.
Important
BİRİnCİl ANAHTAR veya BENZERSİz kısıtlamalar için geçerli olan tek dizin seçeneği olarak FILLFACTOR = fillfactor ile belgeleme 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. "
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 bulunılan tabloda belirtilen sütunda mevcut olmasını gerektirir.
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 sütunların bir sütunu veya listesidir.
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
Üst tablodaki karşılık gelen satır silindiğinde yabancı anahtarı oluşturan tüm değerler NULL olarak ayarlanır. 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ştirilen tabloda ZATEN ON DELETE tetikleyicisi varsa tanımlanamaz.
Örneğin, AdventureWorks2025 veritabanında ProductVendor tablosunun Vendor tablosuyla bir bilgi ilişkisi vardır.
ProductVendor.VendorID yabancı anahtarı Vendor.VendorID birincil anahtarına başvurur.
Bir DELETE deyimi Vendor tablosundaki bir satırda yürütülürse ve ProductVendor.VendorID için ON DELETE CASCADE eylemi belirtilirse, Veritabanı Altyapısı ProductVendor tablosundaki bir veya daha fazla bağımlı satırı denetler. Varsa, ProductVendor tablosundaki bağımlı satırlar, Vendor tablosunda başvurulacak satıra ek olarak silinir.
Buna karşılık, EYLEM YOK belirtilirse, Veritabanı Altyapısı bir hata oluşturur ve ProductVendor tablosunda buna başvuran en az bir satır olduğunda Satıcı 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 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
Üst tablodaki karşılık gelen satır güncelleştirildiğinde yabancı anahtarı oluşturan tüm değerler NULL olarak ayarlanır. 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 tablosunun Vendor tablosuyla bir bilgi ilişkisi vardır.
ProductVendor.VendorID yabancı anahtarı Vendor.VendorID birincil anahtarına başvurur.
Bir UPDATE deyimi Vendor tablosundaki bir satırda yürütülürse ve ProductVendor.VendorID için ON UPDATE CASCADE eylemi belirtilirse, Veritabanı Altyapısı ProductVendor tablosundaki bir veya daha fazla bağımlı satırı denetler. Varsa, ProductVendor tablosundaki bağımlı satır ve Vendor tablosunda başvurulacak satır güncelleştirilir.
Buna karşılık, EYLEM YOK belirtilirse, Veritabanı Altyapısı bir hata oluşturur ve ProductVendor tablosunda buna başvuran en az bir satır olduğunda Satıcı satırında güncelleştirme eylemini 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.
BAĞLANTI Verilen kenar kısıtlamasının bağlanmasına izin verilen düğüm tablo çiftini belirtir. ON DELETE, bu kenar tablosundaki kenarlar aracılığıyla bağlanan düğümler silindiğinde kenar tablosundaki satırlara ne olacağını belirtir.
DEFAULT
Sütun için varsayılan değeri belirtir. DEFAULT tanımları, mevcut veri satırlarında yeni bir sütun için değer sağlamak için kullanılabilir. DEFAULT tanımları zaman damgası veri türüne, IDENTITY özelliğine, var olan default tanımına veya bağlı varsayılana sahip sütunlara eklenemez. Sütunun varsayılanı varsa, yeni varsayılanın eklenebilmesi için önce varsayılan değerin bırakılması gerekir. Kullanıcı tanımlı tür sütunu için varsayılan bir değer belirtilirse, tür constant_expression kullanıcı tanımlı türe örtük dönüştürmeyi desteklemelidir. SQL Server'ın önceki sürümleriyle uyumluluğu korumak için default öğesine bir kısıtlama adı atanabilir.
constant_expression
Sabit değer, NULL veya varsayılan sütun değeri olarak kullanılan bir sistem işlevidir.
constant_expression, Microsoft .NET Framework kullanıcı tanımlı türünde tanımlanmış bir sütunla birlikte kullanılırsa, 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 VARSAYıLAN kısıtlaması eklerken, sütun WITH VALUES kullanarak NULLS'a izin veriyorsa, var olan satırlar için yeni sütunun değerini DEFAULT constant_expression'de verilen değere ayarlayın.
Eklenen sütun NULLS'ye izin vermiyorsa, var olan satırlar için sütunun değeri her zaman DEFAULT sabit ifadesinde verilen değere ayarlanır.
SQL Server 2012'den başlayarak, bu bir meta veri işlemi olabilir ekleme-not-null-columns-as-an-online-operation.
İlgili sütun da eklenmiyorsa bu kullanılırsa 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ı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, NOCHECK seçeneği belirtilmediği sürece 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 ANAHTAR veya BENZERSİz kısıtlamalar eklendiğinde, WITH NOCHECK seçeneğinin 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ı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 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.
SQL Server 2022 (16.x), birincil anahtar ve benzersiz anahtar kısıtlamaları için tablo kısıtlamaları eklemeye yönelik devam ettirilebilir işlemler sağlar. 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ı.
Examples
Örnekler için bkz . ALTER TABLE (Transact-SQL).