Spec-Zone .ru
спецификации, руководства, описания, API

11.5. Значения по умолчанию Типа данных

DEFAULT value пункт в спецификации типа данных указывает на значение по умолчанию для столбца. С одним исключением значение по умолчанию должно быть константой; это не может быть функция или выражение. Это означает, например, что невозможно установить значение по умолчанию для столбца даты, чтобы быть значением функции такой как NOW() или CURRENT_DATE. Исключение - то, что можно определить CURRENT_TIMESTAMP как значение по умолчанию для TIMESTAMP и DATETIME столбцы. См. Раздел 11.3.5, "Автоматическая Инициализация и Обновляющий для TIMESTAMP и DATETIME".

BLOB и TEXT столбцы не могут быть присвоены значение по умолчанию.

Если определение столбца включает не явный DEFAULT значение, MySQL определяет значение по умолчанию следующим образом:

Если столбец может взять NULL как значение, столбец определяется с помощью явного DEFAULT NULL пункт.

Если столбец не может взять NULL как значение, MySQL определяет столбец без явного DEFAULT пункт. Исключение: Если столбец определяется как часть a PRIMARY KEY но не явно как NOT NULL, MySQL создает это как a NOT NULL столбец (потому что PRIMARY KEY столбцы должны быть NOT NULL), но также и присваивает это a DEFAULT пункт используя неявное значение по умолчанию. Чтобы предотвратить это, включайте явное NOT NULL в определении любого PRIMARY KEY столбец.

Для ввода данных в a NOT NULL столбец, который имеет не явный DEFAULT пункт, если INSERT или REPLACE оператор не включает значения для столбца, или UPDATE оператор устанавливает столбец в NULL, MySQL обрабатывает столбец согласно режиму SQL в действительности в это время:

Предположите что таблица t определяется следующим образом:

CREATE TABLE t (i INT NOT NULL);

В этом случае, i не имеет никакого явного значения по умолчанию, таким образом, в строгом режиме каждый из следующих операторов производит ошибку, и никакая строка не вставляется. Если не используя строгий режим, только третий оператор производит ошибку; неявное значение по умолчанию вставляется для первых двух операторов, но третьих сбоев потому что DEFAULT(i) не может произвести значение:

INSERT INTO t VALUES();INSERT INTO t VALUES(DEFAULT);INSERT INTO t VALUES(DEFAULT(i));

См. Раздел 5.1.7, "Режимы SQL Сервера".

Для данной таблицы можно использовать SHOW CREATE TABLE оператор, чтобы видеть, у каких столбцов есть явное DEFAULT пункт.

Неявные значения по умолчанию определяются следующим образом:

SERIAL DEFAULT VALUE в определении целочисленного столбца псевдоним для NOT NULL AUTO_INCREMENT UNIQUE.