Определение первичного ключа таблицы
Спецификация

См. спецификацию пункта «Создание таблицы».

Синтаксические правила
  1. < Имена столбцов > должны быть предварительно определены в < спецификации столбцов таблицы > и не должны повторяться.

  2. Нельзя создать первичный ключ на один и тот же столбец (или с одинаковым набором столбцов).

  3. Атрибуты AUTOINC и PRIMARY KEY совместимы.

    create table test(i int autoinc, primary key (i));
Общие правила
  1. Конструкция < первичный ключ > определяет простой или составной первичный ключ записей таблицы. Столбцы, входящие в состав составного первичного ключа, не допускают NULL-значения.

  2. Атрибут PRIMARY KEY определяет столбец, как простой (не составной) первичный ключ таблицы. Простым первичным ключом может быть объявлен только один столбец таблицы.

  3. Ограничения столбца с атрибутом PRIMARY KEY:

    • не может содержать NULL-значений;

    • не может содержать дубликаты значений. В связи с этим столбец не должен иметь < значение по умолчанию > (DEFAULT-значения) и константное < подставляемое значение >, если допускается возможность добавления NULL-значения.

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

    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);