Определение уникального ключа таблицы
Спецификация
См. спецификацию пункта «Создание таблицы».
Синтаксические правила
-
< Имена столбцов >
должны быть предварительно определены в< спецификации столбцов таблицы >
и не должны повторяться. -
Для столбцов типа DATE, BOOLEAN, BLOB, EXTFILE атрибут UNIQUE недопустим.
-
Нельзя создать уникальный ключ на один и тот же столбец (или с одинаковым набором столбцов).
-
Разрешается одновременное указание ограничений целостности PRIMARY KEY и UNIQUE с одним и тем же набором столбцов (при этом создается только атрибут PRIMARY KEY), однако указание одного из этих атрибутов при существовании другого запрещено.
Примечание
Если ограничения PRIMARY KEY и UNIQUE заданы для одного и того же столбца, останется только PRIMARY KEY.
Пример. create or replace table tst (i int, ch char(10), vch varchar(10), primary key(vch), unique(vch)); Столбец vch будет первичным, а не уникальным ключом.
-
Для одностолбцового уникального ключа разрешено устанавливать DEFAULT-значения.
-
Количество уникальных ключей таблицы ограничено количеством индексов таблицы.
-
В текущей реализации допускается суммарно максимум 250 простых (одностолбцовых) и 100 составных (многостолбцовых) индексов.
Общие правила
-
Конструкция
< уникальный ключ >
определяет простой или составной уникальный ключ записей таблицы. Столбцы, входящие в состав уникального составного ключа, могут содержать NULL-значения. -
Значения столбцов составного уникального ключа могут дублироваться, но комбинация значений всех столбцов составного уникального ключа (без учета NULL-значений) должна быть уникальной.
create or replace table t_pk (c_pk1 int autorowid, c_pk2 char(10), c_pk3 char(10), c_pk4 char(10), unique (c_pk2, c_pk3, c_pk4)); insert into t_pk (c_pk2, c_pk3, c_pk4) values ('Иванов', 'Иван', 'Иванович'), ('Иванов', 'Петр', 'Иванович'), ('Иванов', 'Иван', 'Петрович'), ('Иванов', 'Иван', null), (null, null, null), (null, null, null); select * from t_pk; | 1| Иванов| Иван| Иванович| | 2| Иванов| Петр| Иванович| | 3| Иванов| Иван| Петрович| | 4| Иванов| Иван| null | | 5| null | null| null | | 6| null | null| null |
-
Конструкция UNIQUE (VALUE) означает, что все явно определенные столбцы (исключая псевдостолбцы типа ROWID) таблицы являются частью составного уникального ключа. Таблица в этом случае не должна иметь столбцы типа BLOB или EXTFILE.
Эти конструкции эквивалентны create or replace table test(i int, j int, unique (value)); create or replace table test(i int, j int, unique (i, j));