CREATE

CREATE TABLE

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

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

  • IF NOT EXISTS - если таблица уже существует, то создавать таблицу заново не нужно

  • тип поля - задает тип поля из следующего списка
    • int - целое число

    • smalint - целое число

    • integer - целое число

    • numeric - целое число

    • dec - число

    • decimal - число

    • double - число

    • double - precision число

    • float - число

    • real - число

    • char(num) - строка, num - max количесвто символов, дефолтное значение 1

    • varchar(num) - строка переменной длины, num - max количесвто символов, дефолтное значение зависит от БД

    • date - дата

  • опции - задают различные опции для поля
    • 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))

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

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

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

CREATE INDEX

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

CREATE [UNIQUE] INDEX <таблицаИндексов> ON <таблица>(<столбец>)