Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiNovye.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

Ограничения

Ограничения автоматически обеспечивают целостность данных. Ограничения задают правила, которые определяют значения данных, допустимые для какой-либо колонки. Они позволяют ограничивать значения данных, которые вводятся в колонку, чтобы в этой колонке не оказались неверные значения. Например, с помощью ограничения можно ограничить значения колонки целого типа диапазоном от 1 до 100. В результате любые значения вне этого диапазона нельзя будет ввести в данную колонку. Ограничение только по одной колонке называется ограничением колонки; оно ограничивает значения только этой колонки. Ограничение, которое влияет на несколько колонок, называется ограничением таблицы, или табличным ограничением; в этом случае комбинация значений для колонок, указанных в данном ограничении, должна отвечать требованиям этого ограничения. Имеется пять типов ограничений: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY и CHECK.

Создание и модифицирование ограничений с помощью t-sql Ограничение not null

Ограничение NOT NULL задается в описании колонки, чтобы воспрепятствовать вставке null-значений в эту колонку (в противоположность ограничению NULL, которое разрешает присваивать null-значения). При использовании T-SQL можно указать NOT NULL при создании таблицы или позже, модифицируя какую-либо колонку. Следует использовать NOT NULL вместо NULL там, где это возможно, поскольку операции с null-значениями, такие как сравнения, сопряжены с большей дополнительной нагрузкой при обработке.

Ограничение unique

Ограничение UNIQUE обеспечивает, что в колонке или наборе колонок не будут допускаться дублированные значения; иными словами, обеспечивается уникальность значений в этой колонке или наборе колонок. Для поддержки этой уникальности SQL Server создаёт по умолчанию уникальный некластеризованный индекс по колонке или колонкам, указанным в ограничении UNIQUE. Однако, можно указывать, каким должен быть этот индекс – кластеризованным или некластеризованным. Напомним, что таблица может иметь только один кластеризованный индекс.

Ограничение UNIQUE можно использовать для любой колонки, которая не является частью ограничения PRIMARY KEY, которое также обеспечивает уникальность значений. Ограничение UNIQUE можно использовать для колонок, в которых разрешены null-значения, в то время как ограничения PRIMARY KEY нельзя использовать для таких колонок. Null -значения не затрагиваются ограничениями UNIQUE. На колонку с ограничением UNIQUE может ссылаться ограничение FOREIGN KEY. По одной таблице можно задавать несколько ограничений UNIQUE, пока общее число индексов для этой таблицы не превышает 249 некластеризованных и одного кластеризованного индекса.

Для создания ограничения UNIQUE по таблице с помощью T-SQL, используется оператор CREATE TABLE или ALTER TABLE. Например, следующий оператор создаёт таблицу customer с ограничением UNIQUE по колонке SSN в виде кластеризованного индекса:

CREATE TABLE customer (

first_name char(20) NOT NULL,

mid_init char(1) NULL,

last_name char(20) NOT NULL,

SSN char(11) NOT NULL UNIQUE CLUSTERED,

cust_phone char(10) NULL

)

GO

В этом операторе CREATE использовано ограничение по колонке. В следующем примере снова создается таблица, но на этот раз с добавлением табличного ограничения UNIQUE с именем UQ_full_name по колонкам first_name, mid_init и last_name:

CREATE TABLE customer (

first_name char(20) NOT NULL,

mid_init char(1) NULL,

last_name char(20) NOT NULL,

SSN char(11) NOT NULL UNIQUE CLUSTERED,

cust_phone char(10) NULL,

CONSTRAINT UQ_full_name UNIQUE NONCLUSTERED (first_name,mid_init, last_name)

)

GO

Табличное ограничение UNIQUE (ограничение по более чем одной колонке) обеспечивает уникальность комбинаций значений по соответствующим колонкам. В данном случае в базу данных нельзя ввести двух покупателей, имеющих одинаковое сочетание имени (first_name), фамилии (last_name) и инициала отчества (mid_init). В одной или двух колонках может встретиться одинаковая комбинация, но не во всех трёх колонках. Отметим, что в данном случае табличное ограничение UNIQUE является некластеризованным индексом, поскольку у нас уже имеется уникальный кластеризованный индекс по колонке SSN.

Чтобы добавить ограничение UNIQUE к существующей таблице, используется оператор ALTER TABLE. При попытке модифицировать существующую колонку или колонки, добавляя ограничение UNIQUE, все существующие строки данной таблицы должны содержать уникальные значения или null-значения в этой колонке или колонках, иначе будет сгенерировано сообщение об ошибке и ограничение UNIQUE не будет добавлено. Предположим, что таблица customer создана без каких-либо ограничений. Ниже приводятся два оператора для добавления ограничений по колонке и по таблице:

ALTER TABLE customer

ADD CONSTRAINT UQ_ssn UNIQUE CLUSTERED (SSN)

GO

ALTER TABLE customer

ADD CONSTRAINT UQ_full_name UNIQUE NONCLUSTERED (first_name, mid_init, last_name)

GO

Чтобы изменить существующее ограничение UNIQUE по какой-либо колонке или таблице с помощью T-SQL, следует сначала удалить соответствующее ограничение и затем снова создать его. Как и для умолчаний, следует использовать для ограничений описательные имена, чтобы можно было легко находить и удалять их без необходимости выяснения имён, присвоенных им системой SQL Server. При изменении ограничения с помощью Management Studio система SQL Server автоматически удаляет старое ограничение и вновь создает его, при сохранении выполненных изменений.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]