Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
База данных SQL в предварительной версии Microsoft Fabric
Указывает свойства ограничения PRIMARY KEY, FOREIGN KEY, UNIQUE или CHECK, которые являются частью определения нового столбца, добавляемого в таблицу с помощью инструкции ALTER TABLE.
Соглашения о синтаксисе Transact-SQL
Syntax
Синтаксис для SQL Server, Базы данных SQL Azure, Управляемого экземпляра SQL Azure, базы данных SQL в предварительной версии 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
[ 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
Указывает начало определения для ограничения PRIMARY KEY, UNIQUE, FOREIGN KEY или CHECK.
constraint_name
Имя ограничения. Имена ограничений должны подчиняться правилам для идентификаторов, за исключением тех, которые не могут начинаться с символа решетки (#). Если аргумент constraint_name не указан, то ограничению присваивается имя, формируемое системой.
NULL | НЕ NULL
Указывает, может ли столбец принимать NULL
значения. Столбцы, не разрешающие NULL
значения, можно добавлять только в том случае, если они заданы по умолчанию. Если новый столбец разрешает NULL
значения и не указан по умолчанию, новый столбец содержится NULL
для каждой строки в таблице. Если новый столбец разрешает NULL
значения и определение по умолчанию добавляется с новым столбцом, параметр WITH VALUES можно использовать для хранения значения по умолчанию в новом столбце для каждой существующей строки в таблице.
Если новый столбец не разрешает NULL
значения, необходимо добавить определение DEFAULT с новым столбцом. Новый столбец автоматически заполняется значением по умолчанию в каждой существующей строке.
Если для добавления столбца необходимы физические изменения в строках данных таблицы, например при добавлении значений DEFAULT в каждую строку, то блокировки в таблице удерживаются в течение всего времени выполнения инструкции ALTER TABLE. Это отражается на возможности изменять содержимое таблицы во время действия блокировки. Напротив, добавление столбца, разрешающего значения и не указывающее NULL
значение по умолчанию, является только операцией метаданных и не включает блокировки.
Если вы используете CREATE TABLE
или ALTER TABLE
используете параметры базы данных и сеанса, и, возможно, переопределите значение NULL типа данных, используемого в определении столбца. Рекомендуется всегда явно определять некомпьютированные столбцы как NULL
или NOT NULL
, если вы используете определяемый пользователем тип данных, что позволяет столбцу использовать значение NULL по умолчанию типа данных. Дополнительные сведения см. в разделе CREATE TABLE.
PRIMARY KEY
Ограничение, выполняющее принудительную проверку целостности сущностей для указанного столбца или столбцов при использовании уникального индекса. Для каждой таблицы может быть создано только одно ограничение PRIMARY KEY.
UNIQUE
Ограничение, обеспечивающее целостность сущностей для указанного столбца или столбцов при использовании уникального индекса.
CLUSTERED | НЕКЛАСТЕРИЗОВАННЫЙ
Указывает, что для ограничения PRIMARY KEY или UNIQUE создается кластеризованный или некластеризованный индекс. По умолчанию ограничения PRIMARY KEY имеют значение CLUSTERED. По умолчанию ограничения UNIQUE имеют значение NONCLUSTERED.
Если кластеризованное ограничение или индекс уже созданы в таблице, значение CLUSTERED не может быть задано. Если кластеризованное ограничение или индекс уже существует в таблице, ограничения PRIMARY KEY по умолчанию имеют значение NONCLUSTERED.
Столбцы с типами данных ntext, text, varchar(max), nvarchar(max), varbinary(max), xml или image нельзя указать в качестве столбцов для индекса.
В хранилище Microsoft Fabric некластеризованный не действует.
WITH FILLFACTOR =fillfactor
Указывает, как полный ядро СУБД должен сделать каждую страницу индекса, используемую для хранения данных индекса. Определяемые пользователем значения коэффициента заполнения могут находиться в диапазоне от 1 до 100. Если значение не задано, по умолчанию принимается значение 0.
Important
Документирование WITH FILLFACTOR
как единственный параметр индекса, который применяется к ограничениям PRIMARY KEY или UNIQUE, поддерживается для обратной совместимости, но не будет документирован таким образом в будущих выпусках. Другие параметры индекса можно указать в предложении index_option инструкции ALTER TABLE.
ON { partition_scheme_name(partition_column_name | default }
Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
Указывает место хранения индекса, созданного для ограничения. Если определен аргумент partition_scheme_name, индекс разделяется на секции, которые сопоставляются с файловыми группами, определенными аргументом partition_scheme_name. Если указан аргумент filegroup, индекс создается в файловой группе с таким именем. Если указан аргумент "default" или предложение ON не определено вообще, индекс создается в той же файловой группе, что и таблица. Если при добавлении кластеризованного индекса для ограничений PRIMARY KEY или UNIQUE указано предложение ON, то вся таблица перемещается в указанную файловую группу в момент создания этого индекса.
В этом контексте default не является ключевым словом. Это идентификатор файловой группы по умолчанию, который должен иметь разделители, как в выражении ON default
или ON [default]
. Если задано значение по умолчанию , QUOTED_IDENTIFIER
параметр должен быть ВКЛЮЧЕН для текущего сеанса. Этот параметр принимается по умолчанию. Дополнительные сведения см. в статье SET QUOTED_IDENTIFIER (Transact-SQL).
NOT ENFORCED
В хранилище Microsoft Fabric первичный ключ, уникальный ключ и ограничения внешнего ключа требуют NOT ENFORCED. Целостность ограничений должна поддерживаться приложением.
ССЫЛКИ НА ВНЕШНИЙ КЛЮЧ
Ограничение, обеспечивающее ссылочную целостность данных в столбце. Ограничения FOREIGN KEY требуют, чтобы каждое значение в столбце существовало в указанном столбце в указанной таблице.
schema_name
Имя схемы, к которой принадлежит таблица со ссылкой от ограничения FOREIGN KEY.
referenced_table_name
Таблица, на которую ссылается ограничение FOREIGN KEY.
ref_column
Столбец в скобках, на который ссылается новое ограничение FOREIGN KEY.
ON DELETE { NO ACTION | КАСКАД | SET NULL | SET DEFAULT }
Указывает, какое действие производится над строками изменяемой таблицы, если эти строки имеют ссылочную связь, и строка, на которую имеется ссылка, удаляется из родительской таблицы. Параметр по умолчанию — NO ACTION.
NO ACTION
Sql Server ядро СУБД вызывает ошибку, а действие удаления строки в родительской таблице откатывается.
CASCADE
Если из родительской таблицы удаляется строка, соответствующие ей строки удаляются и из ссылающейся таблицы.
SET NULL
Все значения, составляющие внешний ключ, задаются NULL
при удалении соответствующей строки в родительской таблице. Для выполнения этого ограничения внешние ключевые столбцы должны допускать значения NULL.
SET DEFAULT
Все значения, содержащие внешний ключ, при удалении соответствующей строки родительской таблицы устанавливаются в значения по умолчанию. Для выполнения этого ограничения все внешние ключевые столбцы должны иметь определения по умолчанию. Если столбец имеет значение NULL и нет явного набора значений по умолчанию, NULL
становится неявным значением по умолчанию столбца.
Не следует использовать параметр CASCADE, если таблица будет включена в публикацию слиянием, в которой используются логические записи. Дополнительные сведения о логических записях см. в статье Группирование изменений в связанных строках с помощью логических записей.
ON DELETE CASCADE
невозможно определить, существует ли INSTEAD OF
триггер ON DELETE
в таблице, которая изменяется.
Например, в базе данных AdventureWorks2022
таблица ProductVendor
имеет ссылочную связь с таблицей Vendor
.
ProductVendor
.
VendorID
внешний ключ ссылается на Vendor
.
VendorID
первичный ключ.
Если инструкция DELETE выполняется в строке таблицыVendor
, а действие ON DELETE CASCADE указано для ProductVendor
.VendorID
, ядро СУБД проверяет наличие одной или нескольких зависимых строк в ProductVendor
таблице. При наличии зависимые строки в ProductVendor
таблице будут удалены в дополнение к строке, указанной Vendor
в таблице.
И наоборот, если параметр NO ACTION указан, ядро СУБД вызывает ошибку и откатывает действие Vendor
удаления в строке, если в таблице есть по крайней мере одна строка, которая ссылается на нееProductVendor
.
ON UPDATE { NO ACTION | КАСКАД | SET NULL | SET DEFAULT }
Указывает, какое действие совершается над строками в изменяемой таблице, когда эти строки имеют ссылочную связь и строка родительской таблицы, на которую указывает ссылка, обновляется. Параметр по умолчанию — NO ACTION.
NO ACTION
Ядро СУБД вызывает ошибку, а действие обновления строки в родительской таблице откатится.
CASCADE
Соответствующие строки обновляются в ссылающейся таблице, если эта строка обновляется в родительской таблице.
SET NULL
Все значения, составляющие внешний ключ, задаются NULL
при обновлении соответствующей строки в родительской таблице. Для выполнения этого ограничения внешние ключевые столбцы должны допускать значения NULL.
SET DEFAULT
Всем значениям, составляющим внешний ключ, присваивается их значение по умолчанию, когда обновляется соответствующая строка в родительской таблице. Для выполнения этого ограничения все внешние ключевые столбцы должны иметь определения по умолчанию. Если столбец имеет значение NULL и нет явного набора значений по умолчанию, NULL
становится неявным значением по умолчанию столбца.
Не следует использовать параметр CASCADE, если таблица будет включена в публикацию слиянием, в которой используются логические записи. Дополнительные сведения о логических записях см. в статье Группирование изменений в связанных строках с помощью логических записей.
Действия ON UPDATE CASCADE, SET NULL и SET DEFAULT не могут быть определены, если в изменяемой таблице уже существует триггер INSTEAD OF для условия ON UPDATE.
Например, в базе данных AdventureWorks2022
таблица ProductVendor
имеет ссылочную связь с таблицей Vendor
.
ProductVendor
.
VendorID
внешний ключ ссылается на Vendor
.
VendorID
первичный ключ.
Если инструкция UPDATE выполняется в строке таблицыVendor
, а ON UPDATE CASCADE
действие указано для ProductVendor
.VendorID
, ядро СУБД проверяет наличие одной или нескольких зависимых строк в ProductVendor
таблице. При наличии зависимые строки в ProductVendor
таблице будут обновлены в дополнение к строке, указанной Vendor
в таблице.
И наоборот, если параметр NO ACTION указан, ядро СУБД вызывает ошибку и откатывает действие Vendor
обновления в ProductVendor
строке, если в таблице есть по крайней мере одна строка, которая ссылается на нее.
НЕ ДЛЯ РЕПЛИКАЦИИ
Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
Может быть определено для ограничений FOREIGN KEY и CHECK. Если ограничение сопровождается этим предложением, оно не выполняется, когда агенты репликации выполняют операции вставки, обновления или удаления.
CHECK
Ограничение, обеспечивающее целостность домена путем ограничения возможных значений, которые могут быть введены в столбец или столбцы.
logical_expression
Логическое выражение, используемое в ограничении CHECK и возвращающее значения TRUE или FALSE. Аргумент logical_expression, используемый в ограничениях CHECK, не может содержать ссылок на другие таблицы, но может ссылаться на другие столбцы той же таблицы в той же строке. Выражение не может ссылаться на псевдоним типа данных.
Remarks
При добавлении ограничений FOREIGN KEY или CHECK все существующие данные проверяются для нарушений ограничений, если WITH NOCHECK
не указан параметр. В том случае, если обнаруживаются нарушения, выполнение ALTER TABLE завершается с ошибкой. При добавлении к существующему столбцу ограничений PRIMARY KEY или UNIQUE все данные в столбце должны быть уникальны. Если будут обнаружены повторяющиеся значения, ALTER TABLE завершится неудачно. Параметр WITH NOCHECK
не действует при добавлении ограничений PRIMARY KEY или UNIQUE.
Каждое ограничение PRIMARY KEY и UNIQUE создает индекс. Число ограничений UNIQUE и PRIMARY KEY не может вызвать превышение предельного количества индексов в таблице (999 некластеризованных и 1 кластеризованный). Ограничения внешнего ключа не вызывают автоматического создания индекса. Однако внешние ключевые столбцы часто используются в критерии соединения запросов, сопоставляя ограничение внешнего ключа одной таблицы с первичным или уникальным ключевым столбцом или столбцами в другой таблице. Индекс столбцов внешнего ключа позволяет ядро СУБД быстро находить связанные данные в таблице внешнего ключа.
Examples
Примеры см. в разделе ALTER TABLE (Transact-SQL).