ALTER TABLE column_constraint (Transact-SQL)
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Menentukan properti batasan PRIMARY KEY, FOREIGN KEY, UNIQUE, atau CHECK yang merupakan bagian dari definisi kolom baru yang ditambahkan ke tabel dengan menggunakan ALTER TABLE.
Catatan
Untuk Microsoft Fabric, kunjungi ALTER TABLE column_constraint dan pilih versi produk yang Anda inginkan.
Sintaksis
[ 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 )
}
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
CONSTRAINT
Menentukan awal definisi untuk batasan PRIMARY KEY, UNIQUE, FOREIGN KEY, atau CHECK.
constraint_name
Adalah nama batasan. Nama batasan harus mengikuti aturan untuk pengidentifikasi, kecuali bahwa nama tidak dapat dimulai dengan tanda angka (#). Jika constraint_name tidak disediakan, nama yang dihasilkan sistem ditetapkan ke batasan.
NULL | BUKAN NULL
Menentukan apakah kolom dapat menerima nilai null. Kolom yang tidak memperbolehkan nilai null hanya dapat ditambahkan jika memiliki default yang ditentukan. Jika kolom baru mengizinkan nilai null dan tidak ada default yang ditentukan, kolom baru berisi NULL untuk setiap baris dalam tabel. Jika kolom baru mengizinkan nilai null dan definisi default ditambahkan dengan kolom baru, opsi WITH VALUES dapat digunakan untuk menyimpan nilai default di kolom baru untuk setiap baris yang ada dalam tabel.
Jika kolom baru tidak mengizinkan nilai null, definisi DEFAULT harus ditambahkan dengan kolom baru. Kolom baru secara otomatis dimuat dengan nilai default di kolom baru di setiap baris yang sudah ada.
Saat penambahan kolom memerlukan perubahan fisik pada baris data tabel, seperti menambahkan nilai DEFAULT ke setiap baris, kunci ditahan pada tabel saat ALTER TABLE berjalan. Ini memengaruhi kemampuan untuk mengubah konten tabel saat kunci berada di tempat. Sebaliknya, menambahkan kolom yang memungkinkan nilai null dan tidak menentukan nilai default adalah operasi metadata saja, dan tidak melibatkan kunci.
Saat Anda menggunakan CREATE TABLE atau ALTER TABLE, pengaturan database dan sesi memengaruhi dan mungkin mengesampingkan nullability tipe data yang digunakan dalam definisi kolom. Kami menyarankan agar Anda selalu secara eksplisit menentukan kolom yang tidak dikomputasi sebagai NULL atau NOT NULL atau, jika Anda menggunakan jenis data yang ditentukan pengguna, Anda mengizinkan kolom untuk menggunakan nullability default dari jenis data. Untuk informasi selengkapnya, lihat CREATE TABLE (Transact-SQL).
KUNCI PRIMER
Adalah batasan yang memberlakukan integritas entitas untuk kolom atau kolom tertentu dengan menggunakan indeks unik. Hanya satu batasan KUNCI PRIMER yang dapat dibuat untuk setiap tabel.
UNIQUE
Adalah batasan yang menyediakan integritas entitas untuk kolom atau kolom tertentu dengan menggunakan indeks unik.
BERKLUSTER | NONCLUSTERED
Menentukan bahwa indeks berkluster atau non-kluster dibuat untuk batasan KUNCI PRIMER atau UNIK. BATASAN KUNCI PRIMER default ke CLUSTERED. Batasan UNIK default ke NONCLUSTERED.
Jika batasan atau indeks berkluster sudah ada pada tabel, CLUSTERED tidak dapat ditentukan. Jika batasan atau indeks terkluster sudah ada pada tabel, KUNCI PRIMER membatasi default ke NONCLUSTERED.
Kolom yang merupakan tipe data ntext, teks, varchar(max), nvarchar(max), varbinary(max), xml, atau gambar tidak dapat ditentukan sebagai kolom untuk indeks.
DENGAN fillfactor FILLFACTOR =
Menentukan seberapa lengkap Mesin Database harus membuat setiap halaman indeks digunakan untuk menyimpan data indeks. Nilai faktor pengisian yang ditentukan pengguna dapat dari 1 hingga 100. Jika nilai tidak ditentukan, defaultnya adalah 0.
Penting
MendokumenKAN DENGAN FILLFACTOR = fillfactor sebagai satu-satunya opsi indeks yang berlaku untuk batasan KUNCI PRIMER atau UNIK dipertahankan untuk kompatibilitas mundur, tetapi tidak akan didokumenkan dengan cara ini dalam rilis mendatang. Opsi indeks lain dapat ditentukan dalam klausa index_option ALTER TABLE.
ON { partition_scheme_name(partition_column_name) | filegroup | "default" } Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
Menentukan lokasi penyimpanan indeks yang dibuat untuk batasan. Jika partition_scheme_name ditentukan, indeks dipartisi dan partisi dipetakan ke grup file yang ditentukan oleh partition_scheme_name. Jika grup file ditentukan, indeks dibuat dalam grup file bernama. Jika "default" ditentukan atau jika ON tidak ditentukan sama sekali, indeks dibuat dalam grup file yang sama dengan tabel. Jika ON ditentukan ketika indeks berkluster ditambahkan untuk batasan KUNCI PRIMER atau UNIK, seluruh tabel dipindahkan ke grup file yang ditentukan saat indeks berkluster dibuat.
Dalam konteks ini, default, bukan kata kunci. Ini adalah pengidentifikasi untuk grup file default dan harus dibatasi, seperti dalam ON "default" atau ON [default]. Jika "default" ditentukan, opsi QUOTED_IDENTIFIER harus AKTIF untuk sesi saat ini. Ini adalah pengaturan default. Untuk informasi selengkapnya, lihat SET QUOTED_IDENTIFIER (Transact-SQL).
REFERENSI KUNCI ASING
Adalah batasan yang memberikan integritas referensial untuk data di kolom. Batasan KUNCI ASING mengharuskan setiap nilai dalam kolom ada di kolom yang ditentukan dalam tabel yang dirujuk.
schema_name
Adalah nama skema tempat tabel yang dirujuk oleh batasan KUNCI ASING berada.
referenced_table_name
Adalah tabel yang dirujuk oleh batasan KUNCI ASING.
ref_column
Adalah kolom dalam tanda kurung yang direferensikan oleh batasan KUNCI ASING baru.
ON DELETE { NO ACTION | CASCADE | SET NULL | ATUR DEFAULT }
Menentukan tindakan apa yang terjadi pada baris dalam tabel yang diubah, jika baris tersebut memiliki hubungan referensial dan baris yang direferensikan dihapus dari tabel induk. Defaultnya adalah NO ACTION.
TIDAK ADA TINDAKAN
Mesin Database SQL Server menimbulkan kesalahan dan tindakan hapus pada baris dalam tabel induk digulung balik.
CASCADE
Baris terkait dihapus dari tabel referensi jika baris tersebut dihapus dari tabel induk.
SET NULL
Semua nilai yang membentuk kunci asing diatur ke NULL saat baris terkait dalam tabel induk dihapus. Agar batasan ini dijalankan, kolom kunci asing harus dapat diubah ke null.
ATUR DEFAULT
Semua nilai yang terdiri dari kunci asing diatur ke nilai defaultnya saat baris terkait dalam tabel induk dihapus. Agar batasan ini dijalankan, semua kolom kunci asing harus memiliki definisi default. Jika kolom dapat diubah ke null dan tidak ada nilai default eksplisit yang ditetapkan, NULL menjadi nilai default implisit kolom.
Jangan tentukan CASCADE jika tabel akan disertakan dalam publikasi gabungan yang menggunakan rekaman logis. Untuk informasi selengkapnya tentang rekaman logis, lihat Perubahan Grup pada Baris Terkait dengan Rekaman Logis.
ON DELETE CASCADE tidak dapat ditentukan jika ALIH-ALIH pemicu ON DELETE sudah ada pada tabel yang sedang diubah.
Misalnya, dalam database, tabel ProductVendor memiliki hubungan referensial dengan tabel Vendor.AdventureWorks2022
Kunci asing ProductVendor.VendorID mereferensikan kunci primer Vendor.VendorID .
Jika pernyataan DELETE dijalankan pada baris dalam tabel Vendor, dan tindakan ON DELETE CASCADE ditentukan untuk ProductVendor.VendorID, Mesin Database memeriksa satu atau beberapa baris dependen dalam tabel ProductVendor. Jika ada, baris dependen dalam tabel ProductVendor akan dihapus, selain baris yang dirujuk dalam tabel Vendor .
Sebaliknya, jika TIDAK ADA TINDAKAN yang ditentukan, Mesin Database menimbulkan kesalahan dan mengembalikan tindakan penghapusan pada baris Vendor ketika setidaknya ada satu baris dalam tabel ProductVendor yang mereferensikannya.
ON UPDATE { NO ACTION | CASCADE | SET NULL | ATUR DEFAULT }
Menentukan tindakan apa yang terjadi pada baris dalam tabel yang diubah ketika baris tersebut memiliki hubungan referensial dan baris yang direferensikan diperbarui dalam tabel induk. Defaultnya adalah NO ACTION.
TIDAK ADA TINDAKAN
Mesin Database menimbulkan kesalahan, dan tindakan pembaruan pada baris dalam tabel induk digulung balik.
CASCADE
Baris terkait diperbarui dalam tabel referensi saat baris tersebut diperbarui dalam tabel induk.
SET NULL
Semua nilai yang membentuk kunci asing diatur ke NULL saat baris terkait dalam tabel induk diperbarui. Agar batasan ini dijalankan, kolom kunci asing harus dapat diubah ke null.
ATUR DEFAULT
Semua nilai yang membentuk kunci asing diatur ke nilai defaultnya saat baris terkait dalam tabel induk diperbarui. Agar batasan ini dijalankan, semua kolom kunci asing harus memiliki definisi default. Jika kolom dapat diubah ke null dan tidak ada nilai default eksplisit yang ditetapkan, NULL menjadi nilai default implisit kolom.
Jangan tentukan CASCADE jika tabel akan disertakan dalam publikasi gabungan yang menggunakan rekaman logis. Untuk informasi selengkapnya tentang rekaman logis, lihat Perubahan Grup pada Baris Terkait dengan Rekaman Logis.
ON UPDATE CASCADE, SET NULL, atau SET DEFAULT tidak dapat ditentukan jika PEMicu ALIH-ALIH ON UPDATE sudah ada pada tabel yang sedang diubah.
Misalnya, dalam database, tabel ProductVendor memiliki hubungan referensial dengan tabel Vendor.AdventureWorks2022
Kunci asing ProductVendor.VendorID mereferensikan kunci primer Vendor.VendorID .
Jika pernyataan UPDATE dijalankan pada baris dalam tabel Vendor dan tindakan ON UPDATE CASCADE ditentukan untuk ProductVendor.VendorID, Mesin Database memeriksa satu atau beberapa baris dependen dalam tabel ProductVendor. Jika ada, baris dependen dalam tabel ProductVendor akan diperbarui, selain baris yang dirujuk dalam tabel Vendor .
Sebaliknya, jika TIDAK ADA TINDAKAN yang ditentukan, Mesin Database menimbulkan kesalahan dan mengembalikan tindakan pembaruan pada baris Vendor ketika setidaknya ada satu baris dalam tabel ProductVendor yang mereferensikannya.
BUKAN UNTUK REPLIKASI
Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
Dapat ditentukan untuk batasan KUNCI ASING dan batasan CHECK. Jika klausa ini ditentukan untuk batasan, batasan tidak diberlakukan saat agen replikasi melakukan operasi sisipkan, perbarui, atau hapus.
CHECK
Adalah batasan yang memberlakukan integritas domain dengan membatasi kemungkinan nilai yang dapat dimasukkan ke dalam kolom atau kolom.
logical_expression
Adalah ekspresi logis yang digunakan dalam batasan CHECK dan mengembalikan TRUE atau FALSE. logical_expression digunakan dengan batasan CHECK tidak dapat mereferensikan tabel lain tetapi dapat mereferensikan kolom lain dalam tabel yang sama untuk baris yang sama. Ekspresi tidak dapat mereferensikan jenis data alias.
Keterangan
Ketika batasan FOREIGN KEY atau CHECK ditambahkan, semua data yang ada diverifikasi untuk pelanggaran batasan kecuali opsi WITH NOCHECK ditentukan. Jika ada pelanggaran yang terjadi, ALTER TABLE gagal dan kesalahan dikembalikan. Saat KUNCI PRIMER atau batasan UNIK baru ditambahkan ke kolom yang sudah ada, data di kolom atau kolom harus unik. Jika nilai duplikat ditemukan, ALTER TABLE gagal. Opsi WITH NOCHECK tidak berpengaruh ketika batasan KUNCI PRIMER atau UNIK ditambahkan.
Setiap KUNCI PRIMER dan batasan UNIK menghasilkan indeks. Jumlah batasan UNIQUE dan PRIMARY KEY tidak dapat menyebabkan jumlah indeks pada tabel melebihi 999 indeks non-kluster dan 1 indeks berkluster. Batasan kunci asing tidak secara otomatis menghasilkan indeks. Namun, kolom kunci asing sering digunakan dalam kriteria gabungan dalam kueri dengan mencocokkan kolom atau kolom dalam batasan kunci asing dari satu tabel dengan kolom atau kolom kunci utama atau unik di tabel lain. Indeks pada kolom kunci asing memungkinkan Mesin Database menemukan data terkait dengan cepat dalam tabel kunci asing.
Contoh
Misalnya, lihat ALTER TABLE (Transact-SQL).
Lihat Juga
Berlaku untuk: Gudang di Microsoft Fabric
Menentukan properti KUNCI PRIMER, UNIK, KUNCI ASING, batasan CHECK, atau definisi DEFAULT yang ditambahkan ke tabel dengan menggunakan ALTER TABLE di Gudang di Microsoft Fabric.
Catatan
Untuk platform SQL Server dan Azure SQL, kunjungi ALTER TABLE column_constraint dan pilih versi produk yang Anda inginkan.
Sintaks
[ 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
}
Argumen
CONSTRAINT
Menentukan awal definisi untuk KUNCI PRIMER, UNIK, atau KUNCI ASING.
constraint_name
Adalah nama batasan. Nama batasan harus mengikuti aturan untuk pengidentifikasi, kecuali bahwa nama tidak dapat dimulai dengan tanda angka (#). Jika constraint_name tidak disediakan, nama yang dihasilkan sistem ditetapkan ke batasan.
KUNCI PRIMER
Pengguna perlu memastikan bahwa integritas entitas untuk kolom atau kolom tertentu bersifat unik untuk menghindari hasil kueri yang salah. Hanya satu batasan KUNCI PRIMER yang dapat dibuat untuk setiap tabel.
UNIQUE
Pengguna perlu memastikan bahwa integritas entitas untuk kolom atau kolom tertentu bersifat unik untuk menghindari hasil kueri yang salah.
TIDAK TERKLUSTER
Diperlukan untuk kompatibilitas sintaks migrasi tetapi tidak berpengaruh di Gudang.
column
Adalah kolom atau daftar kolom yang ditentukan dalam tanda kurung yang digunakan dalam batasan baru.
[ ASC | DESC ]
Menentukan urutan pengurutan kolom atau kolom yang berpartisipasi dalam batasan tabel. Defaultnya adalah ASC.
TIDAK DIBERLAKUKAN
Di Microsoft Fabric, kunci primer, kunci unik, dan batasan kunci asing tidak memerlukan DIBERLAKUKAN. Integritas batasan harus dipertahankan oleh aplikasi.
REFERENSI KUNCI ASING
Pengguna perlu memastikan batasan KUNCI ASING secara manual memiliki setiap nilai dalam kolom, juga ada di kolom yang ditentukan dalam tabel yang direferensikan untuk menghindari hasil kueri yang salah.
referenced_table_name
Adalah tabel yang dirujuk oleh batasan KUNCI ASING.
ref_column
Adalah kolom atau daftar kolom dalam tanda kurung yang direferensikan oleh batasan KUNCI ASING baru.
Misalnya, dalam AdventureWorks2022
database, ProductVendor
tabel memiliki hubungan referensial dengan Vendor
tabel. Kunci ProductVendor.VendorID
asing mereferensikan Vendor.VendorID
kunci primer.