SQL UNIQUE
Ограничение UNIQUE в SQL позволяет идентифицировать каждую запись в таблице. Если помещается ограничение столбца UNIQUE в поле при создании таблицы, база данных отклонит любую попытку ввода в это поле для одной из строк, значения, которое уже представлено в другой строке. Это ограничение может применяться только к полям, которые были объявлены как непустые (NOT NULL), так как не имеет смысла позволить одной строке таблицы иметь значение NULL, а затем исключать другие строки с NULL значениями как дубликаты.
SQL Server / Oracle / Access
Пример создания таблицы SQL с ограничением UNIQUE:
CREATE TABLE Student ( Kod_stud integer NOT NULL UNIQUE, Fam char (30) NOT NULL UNIQUE, Adres char (50), Ball decimal);
Когда обьявляется поле Fam уникальным, две Смирновых Марии могут быть введены различными способами — например, Смирнова Мария и Смирнова М. Столбцы (не первичные ключи), чьи значения требуют уникальности, называются ключами-кандидатами или уникальными ключами. Можно определить группу полей как уникальную с помощью команды ограничения таблицы — UNIQUE. Объявление группы полей уникальной, отличается от объявления уникальными индивидуальных полей, так как это комбинация значений, а не просто индивидуальное значение, которое обязано быть уникальным. Уникальность группы заключается в том, что пары строк со значениями столбцов «a», «b» и «b», «a» рассматривались отдельно одна от другой.
Если база данных определяет, что каждая специальность принадлежит одному и только одному факультету, то каждая комбинация кода факультета(Kod_f) и кода специальности(Kod_spec) в таблице Spec должна быть уникальной. Например:
CREATE TABLE Spec ( Kod_spec integer NOT NULL, Kod_f integer NOT NULL, Nazv_spec char (50) NOT NULL, UNIQUE (Kod_spec, Kod_f));
Оба поля в ограничении таблицы UNIQUE все еще используют ограничение столбца — NOT NULL. Если бы использовалось ограничение столбца UNIQUE для поля Kod_spec, такое ограничение таблицы было бы необязательным. Если значения поля Kod_spec различно для каждой строки, то не может быть двух строк с идентичной комбинацией значений полей Kod_spec и Kod_f.
Ограничение таблицы UNIQUE наиболее полезно, когда индивидуальные поля не обязательно должны быть уникальными.
MySQL UNIQUE
Пример создания таблицы Persons в MySQL с ограничением UNIQUE:
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (P_Id) );
Удалить ограничение UNIQUE
Если после создания ограничения UNIQUE и в том случае, когда ограничение UNIQUE не имеет смысла, UNIQUE можно удалить. Для этого используйте следующий SQL: SQL Server / Oracle / MS Access:
ALTER TABLE table_name DROP CONSTRAINT uc_PersonID;
MySQL:
SQL — Ограничение UNIQUE
Ограничение UNIQUE гарантирует, что все значения в столбце отличаются. Ограничения UNIQUE и PRIMARY KEY гарантируют уникальность столбца или набора столбцов. Ограничение PRIMARY KEY автоматически имеет ограничение UNIQUE.
Однако для каждой таблицы может быть множество ограничений UNIQUE, но только одно ограничение PRIMARY KEY для каждой таблицы.
CREATE TABLE users ( user_id int NOT NULL, name varchar(255) NOT NULL, fullname varchar(255), gender int, UNIQUE (user_id) );
SQL UNIQUE ограничение в ALTER TABLE
Чтобы создать ограничение UNIQUE в столбце «user_id», когда таблица уже создана, используйте следующее:
ALTER TABLE users ADD UNIQUE (user_id);
Чтобы назвать ограничение UNIQUE и определить ограничение UNIQUE для нескольких столбцов, используйте следующий синтаксис:
ALTER TABLE users ADD CONSTRAINT UC_Users UNIQUE (user_id, name);
DROP a UNIQUE
Чтобы удалить ограничение UNIQUE, используйте следующий SQL:
ALTER TABLE users DROP INDEX UC_Users;
Создание ограничений уникальности
Вы можете создать уникальное ограничение в SQL Server с помощью SQL Server Management Studio или Transact-SQL, чтобы не вводить повторяющиеся значения в определенных столбцах, которые не участвуют в первичном ключе. Создание ограничения уникальности автоматически приводит к созданию соответствующего уникального индекса.
Сведения об уникальных ограничениях в Azure Synapse Analytics см. в статье «Первичный ключ», «Внешний ключ» и уникальный ключ в Azure Synapse Analytics.
Разрешения
Требуется разрешение ALTER на таблицу.
Использование SQL Server Management Studio (SSMS)
Создание уникального ограничения с помощью SSMS
- В обозревателе объектовщелкните правой кнопкой мыши таблицу, в которую необходимо добавить ограничение уникальности, и выберите Конструктор.
- В меню Конструктор таблиц выберите пункт Индексы и ключи.
- В диалоговом окне Индексы и ключи нажмите Добавить.
- В сетке в разделе «Общие» выберите «Тип » и выберите «Уникальный ключ » в раскрывающемся списке справа от свойства и нажмите кнопку «Закрыть«.
- В меню Файл выберите пункт Сохранить имя таблицы.
Использование Transact-SQL
Создание уникального ограничения с помощью Transact-SQL
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На панели «Стандартный » выберите «Создать запрос«.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере создаются таблица TransactionHistoryArchive4 и ограничение уникальности в столбце TransactionID .
USE AdventureWorks2022; GO CREATE TABLE Production.TransactionHistoryArchive4 ( TransactionID int NOT NULL, CONSTRAINT AK_TransactionID UNIQUE(TransactionID) ); GO
Создание уникального ограничения для существующей таблицы
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На панели «Стандартный » выберите «Создать запрос«.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере создается ограничение уникальности в столбцах PasswordHash и PasswordSalt в таблице Person.Password .
USE AdventureWorks2022; GO ALTER TABLE Person.Password ADD CONSTRAINT AK_Password UNIQUE (PasswordHash, PasswordSalt); GO
Создание уникального ограничения для новой таблицы
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На панели «Стандартный » выберите «Создать запрос«.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере создается таблица и определяется ограничение уникальности в столбце TransactionID .
USE AdventureWorks2022; GO CREATE TABLE Production.TransactionHistoryArchive2 ( TransactionID int NOT NULL, CONSTRAINT AK_TransactionID UNIQUE(TransactionID) ); GO
Создание уникального ограничения для столбца, допускаемого значение NULL
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На панели «Стандартный » выберите «Создать запрос«.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В примере создается отфильтрованное уникальное ограничение с помощью синтаксиса CREATE UNIQUE INDEX , применяющее только уникальность для значений, отличных NULL от значений.
USE AdventureWorks2022; GO CREATE UNIQUE INDEX UQ_AdventureWorksDWBuildVersion ON dbo.AdventureWorksDWBuildVersion (DBVersion) WHERE (DBVersion IS NOT NULL); GO
Связанный контент
- Инструкция ALTER TABLE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- table_constraint (Transact-SQL)
Unique Constraints SQL Server
В SQL Server (Transact-SQL) Unique Constraints как создавать, удалять, отключать, и включать unique constraints (уникальные ограничения)
Уникальное ограничение — это одно поле или комбинация полей, которые однозначно определяют запись. Некоторые из полей могут содержать нулевые значения, если комбинация значений уникальна.
В чем разница между уникальным ограничением и первичным ключом?
Первичный ключ — поля, которые являются частью первичного ключа, не могут содержать значение NULL.
Уникальное ограничение — некоторые поля, которые являются частью уникального ограничения, могут содержать значения NULL, если комбинация значений уникальна.
Создание уникального ограничения — использование оператора CREATE TABLE
Синтаксис создания уникального ограничения с использованием оператора CREATE TABLE в SQL
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
.
CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2, . uc_col_n)
);
table_name — имя таблицы, которую вы хотите создать.
column1 , column2 — столбцы, которые вы хотите создать в таблице.
constraint_name — имя уникального ограничения.
uc_col1 , uc_col2 , . uc_col_n — столбцы, которые составляют уникальное ограничение.
Пример
Рассмотрим пример создания уникального ограничения в SQL Server с помощью опертора CREATE TABLE.