Определение первичного ключа таблицы
Спецификация
См. спецификацию пункта «Создание таблицы».
Синтаксические правила
-
<Имена столбцов>
должны быть предварительно определены в<спецификации столбцов таблицы>
и не должны повторяться. -
Нельзя создать первичный ключ на один и тот же столбец (или с одинаковым набором столбцов).
-
Атрибуты AUTOINC и PRIMARY KEY совместимы.
create table test(i int autoinc, primary key (i));
Общие правила
-
Конструкция
<первичный ключ>
определяет простой или составной первичный ключ записей таблицы. Столбцы, входящие в состав составного первичного ключа, не допускают NULL-значения. -
Атрибут PRIMARY KEY определяет столбец, как простой (не составной) первичный ключ таблицы. Простым первичным ключом может быть объявлен только один столбец таблицы.
-
Ограничения столбца с атрибутом PRIMARY KEY:
-
не может содержать NULL-значений;
-
не может содержать дубликаты значений. В связи с этим столбец не должен иметь
<значение по умолчанию>
(DEFAULT-значения) и константное<подставляемое значение>
, если допускается возможность добавления NULL-значения.
-
-
Значения отдельных столбцов составного первичного ключа могут дублироваться, но комбинация значений всех столбцов составного первичного ключа должна быть уникальной.
create or replace table t_pk (c_pk1 int, c_pk2 decimal, c_pk3 char(10), primary key (c_pk1, c_pk3)); insert into t_pk (c_pk1, c_pk2, c_pk3) values (10, 25.7,'aaa'), (20, 67.5,'bbb'), (10, 219.6, 'bbb'), (20, 66.8, 'aaa'); 10 25.7 aaa 20 67.5 bbb 10 219.6 bbb 20 66.8 aaa Ошибка - повторное значение ключа insert into t_pk (c_pk1, c_pk2, c_pk3) values (10, 25.7,'aaa'), Недопустимое значение ключа insert into t_pk (c_pk1, c_pk2, c_pk3) values (null, 25.7,'aaa'); insert into t_pk (c_pk1, c_pk2, c_pk3) values (40, 78.7, null);