CREATE TABLE

Оператор создает таблицу

CREATE
    [TEMP | TEMPORARY] TABLE [IF NOT EXISTS]
    [<название БД>.]<название таблицы>
    (
        <название поля> [<тип поля>] [<опции>],
        ...,
        [<дополнительные опции>])

TEMP, TEMPORARY

Временная таблица

CREATE TEMPORARY TABLE table_name AS
SELECT * from table;

IF NOT EXISTS

Tсли таблица уже существует, то создавать таблицу заново не нужно

Описание полей

Типы полей

Опции - задают различные опции для поля

  • CHECK() - значение, вставляемое в поле, должно удовлетворять условию

  • COLLATE <функция> - задает функцию сравнения для класса TEXT. В качестве функции можно задать следующие функции:
    • BINARY - значение по умолчанию

    • NOCASE - без учета регистра

    • RTRIM

  • DEFAULT <значение> - значение по умолчанию для поля. в качестве значения можно укзать и константы:
    • CURRENT_TIME - текущее время UTC в формате чч:мм:сс

    • CURRENT_DATE - текущая дата UTC в формате гггг-мм-дд

    • CURRENT_TIMESTAMP - текущая дата и время UTC в формате гггг-мм-дд чч:мм:сс

  • NOT NULL [<обработка ошибок>] - поле обязательно должно иметь значение при вставке

  • PRIMARY KEY [ASC | DESC] [<обработка ошибок>] [AUTOINCREMENT] - поле является первичным ключом таблицы.

  • UNIQUE [<обработка ошибок>] - поле может содержать только уникальные значения

Дополнительные опции - задают дополнительные опции для таблицы

  • CHECK(<условие>) - значение должно удовлетворять указанному значению

  • PRIMARY KEY (<список полей через запятую>) [<обработка ошибок>] - позволяет задать первичный клч для нескольких полей

  • UNIQUE (<список полей через запятую>) [<обработка ошибок>] - указывает, что заданные поля могут содержать только уникальные значения

Необязательный параметр <обработка ошибок> задает способ разрешения конфликтных ситуации. Формат конструкции ON CONFLICT <алгоритм>.

Алгоритмы:

  • ABORT - при ошибке, аннулируются все изменения и выводится сообщение об ошибке

  • FAIL - при ошибке, изменения сохраняются, выполнение команды прерывается и выводится сообщение об ошибке

  • IGNORE - ошибка игнорируется

  • REPLACE
    • при нарушении условия UNIQUE существующая запись удаляется, а новая вставляется. сообщение об ошибке не выводится

    • при нарушении условия NOT NULL, значение NULL заменяется значением по умолчанию, а если он не задан то выполняется алгоритм ABORT

    • если нарушено условие CHECK, применяется алгоритм IGNORE

  • ROLLBACK - при ошибке, транзакция завершается с откатом всех изменений, дальнейшее выполнение прерывается и выводится сообщение об ошибке. Если активной транзакций нет, то используется алгоритм ABORT

CREATE TABLE table (
    snum int
    , sname char(10)
    , sname char(10) DEFAULT='123'
    , snum1 integer UNIQUE
    , snum2 integer NOT NULL
    , snum3 integer PRIMARY KEY
    , snum4 integer REFERENCES table1
    , comm decimal CHECK(comm<1)
    , comm1 decimal CHECK(comm in (1,2,3,4))
    , id integer not null default nextval('my_table_id_seq')

    -- вариант определения уникальных полей, уникальность смотрится по комбинации по полям
    UNIQUE(snum2, snum3),

    -- аналогично unique
    PRIMARY KEY(snum2, snum3)

    -- аналогично unique
    FOREIGN KEY (snum) REFERENCES Salespeople
)