Spec-Zone .ru
спецификации, руководства, описания, API
|
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 в действительности в это время:
Если строгий режим SQL включается, ошибка происходит для транзакционных таблиц, и оператор откатывается. Для нетранзакционных таблиц ошибка происходит, но если это происходит для второй или последующей строки оператора многократной строки, предыдущие строки будут вставлены.
Если строгий режим не включается, MySQL устанавливает столбец в неявное значение по умолчанию для типа данных столбца.
Предположите что таблица 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
пункт.
Неявные значения по умолчанию определяются следующим образом:
Для числовых типов значение по умолчанию 0
, за
исключением того, что для целого числа или типов с плавающей точкой, объявленных с AUTO_INCREMENT
атрибут, значение по умолчанию является следующим
значением в последовательности.
Поскольку дата и время вводит кроме TIMESTAMP
, значение по умолчанию является соответствующим "нулевым" значением для типа. Это - также
истина для TIMESTAMP
если explicit_defaults_for_timestamp
системная переменная включается (см.
Раздел 5.1.4, "Системные Переменные Сервера").
Иначе, для первого TIMESTAMP
столбец в таблице, значение по умолчанию является текущей датой и время. См. Раздел
11.3, "Дата и Типы Времени".
Поскольку строка вводит кроме ENUM
, значение по умолчанию является пустой строкой. Для ENUM
, значение по умолчанию является первой перечислимой величиной.
SERIAL DEFAULT VALUE
в определении целочисленного столбца псевдоним для NOT NULL AUTO_INCREMENT UNIQUE
.