Ограничение NOT NULL можно изменить с помощью оператора ALTER TABLE ALTER COLUMN
. Поэтому явное имя для ограничения NOT NULL бесполезно. Имя ограничения NOT NULL не будет сохранено в метаданных базы данных.
Другие ограничения (первичный ключ, внешний ключ, уникальный, проверка и значение по умолчанию) могут быть удалены с помощью оператора ALTER TABLE DROP CONSTRAINT
. Для таких операторов должно быть указано имя ограничения. Таким образом, технически имя ограничения всегда требуется для таких ограничений.
Но имена ограничений всегда являются необязательными в синтаксисе SQL , поэтому вы всегда можете опустить CONSTRAINT [constraintname]
при создании ограничения. Так что это тоже допустимый SQL:
CREATE TABLE dbo.T1
(
keycol INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
datacol NVARCHAR(40) NOT NULL
);
Однако для ограничений, которые на самом деле потребуют имя ограничения для удаления, СУБД автоматически сгенерирует имя ограничения, если оно не указано явно. В приведенном выше операторе CREATE TABLE
первичный ключ получит имя, подобное PK__T1__98D78B44D915DA1F
.
Явное присвоение имен вашим первичным ключам, внешним ключам, уникальным ограничениям, проверочным ограничениям и ограничениям по умолчанию облегчит дальнейшее обслуживание таблиц вашей базы данных. Если вы явно дадите имена своим ограничениям, вы всегда будете точно знать, как эти ограничения по имени. Если вы хотите удалить «безымянное» ограничение, вы должны сначала найти его сгенерированное имя в метаданных базы данных (что я считаю довольно уродливым и сложным).