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

Ограничение primary key

Ограничение PRIMARY KEY используется, чтобы задать первичный ключ таблицы, представляемый колонкой или набором колонок, уникальным образом идентифицирующих строку таблицы. Поскольку первичный ключ идентифицирует строку, соответствующая колонка никогда не содержит значения NULL. В этом состоит отличие ограничения PRIMARY KEY от ограничения UNIQUE, которое допускает null-значения. При определении ограничения PRIMARY KEY по набору колонок, это ограничение указывает, что комбинация значений этих колонок должна быть уникальной для каждой строки, что аналогично ограничению UNIQUE по набору колонок. И, подобно ограничению UNIQUE, ограничение PRIMARY KEY не допускает дублированных значений. Если ограничение PRIMARY KEY присваивается колонке или набору колонок, то по этой колонке или колонкам первичного ключа автоматически создается уникальный индекс. Также можно задать для первичного ключа кластеризованный или некластеризованный индекс; если ничего не задано, по умолчанию создаётся кластеризованный индекс, если таблица ещё не имела кластеризованного индекса.

Таблица может иметь только одно ограничение PRIMARY KEY. Колонка с атрибутом IDENTITY хорошо подходит для первичного ключа, как и любая другая колонка или набор колонок, являющиеся уникальными для каждой строки. Например, в примере таблицы customer модно было задать колонку SSN как первичный ключ вместо создания для неё ограничения UNIQUE. Ограничение PRIMARY KEY не допускало бы null-значений и обеспечивало бы уникальность значений в колонке SSN, а по этой колонке первичного ключа был бы автоматически создан кластеризованный индекс. Следующий оператор T-SQL представляет один из способов задания колонки SSN как первичного ключа, при определении таблицы. При этом способе имя ограничению PRIMARY KEY присваивает SQL Server, поэтому он не является предпочтительным методом, так как в дальнейшем может потребоваться удаление данного ключа по имени.

CREATE TABLE customer (

first_name char(20) NOT NULL,

mid_init char(1) NULL,

last_name char(20) NOT NULL,

SSN char(11) PRIMARY KEY,

cust_phone char(10) NULL

)

GO

Используя альтернативный способ, можно присвоить имя этому ограничению, добавив ключевое слово CONSTRAINT. Чтобы присвоить имя PK_SSN ограничению PRIMARY KEY, используется следующий оператор:

CREATE TABLE customer (

first_name char(20) NOT NULL,

mid_init char(1) NULL,

last_name char(20) NOT NULL,

SSN char(11) CONSTRAINT PK_SSN PRIMARY KEY,

cust_phone char(10) NULL

)

GO

Также можно задать ограничение PRIMARY KEY после того, как определены все колонки таблицы. При использовании этого синтаксиса имя колонки должно быть заключено в круглые скобки и указано после предложения CONSTRAINT, как это показано в следующем операторе:

CREATE TABLE customer (

first_name char(20) NOT NULL,

mid_init char(1) NULL,

last_name char(20) NOT NULL,

SSN char(11),

cust_phone char(10) NULL,

CONSTRAINT PK_SSN PRIMARY KEY (SSN)

)

GO

Для добавления ограничение PRIMARY KEY к таблице, не имеющей ограничения PRIMARY KEY, используется оператор ALTER TABLE. Следующий оператор добавляет ограничение PRIMARY KEY к таблице customer:

ALTER TABLE customer

ADD CONSTRAINT PK_SSN PRIMARY KEY CLUSTERED (SSN)

GO

Здесь в текст команды включено необязательное ключевое слово CLUSTERED, чтобы просто разъяснить, что по колонке первичного ключа будет создан кластеризованный индекс, хотя это происходит по умолчанию.

Для удаления ограничения PRIMARY KEY, используется оператор ALTER TABLE с предложением DROP CONSTRAINT. Следующий пример демонстрирует удаление ограничения по колонке SSN:

ALTER TABLE customer

DROP CONSTRAINT PK_SSN

GO

Отметим, что для предложения DROP CONSTRAINT требуется только имя ограничения. Чтобы изменить существующее ограничение PRIMARY KEY по таблице с помощью операторов T-SQL следует сначала удалить существующее ограничение и затем выполнить изменение таблицы, добавив новое ограничение. Это выполняется с помощью операторов ALTER TABLE...DROP CONSTRAINT и ALTER TABLE...ADD CONSTRAINT.

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