11.6 Значения по умолчанию для типов данных
Спецификации типов данных могут иметь явные или неявные значения по умолчанию.
Обработка явных значений по умолчанию
Оператор DEFAULT в спецификации типа данных явно указывает значение по умолчанию для столбца. Примеры:value
CREATE TABLE t1 (
i INT DEFAULT -1,
c VARCHAR(10) DEFAULT '',
price DOUBLE(16,2) DEFAULT '0.00'
);
SERIAL DEFAULT VALUE — это специальный случай. В определении целочисленного столбца он является псевдонимом для NOT NULL AUTO_INCREMENT UNIQUE.
За исключением одного случая, значение по умолчанию, заданное в операторе DEFAULT, должно быть литеральной константой; это не может быть функция или выражение. Это означает, например, что вы не можете установить значение по умолчанию для столбца даты как значение функции, такой как NOW() или CURRENT_DATE. Исключением являются столбцы типа TIMESTAMP и DATETIME, для которых вы можете указать CURRENT_TIMESTAMP как значение по умолчанию. См. Раздел 11.2.6, «Автоматическая инициализация и обновление для TIMESTAMP и DATETIME».
Для типов данных BLOB, TEXT, GEOMETRY и JSON невозможно задать значение по умолчанию.
Обработка неявных значений по умолчанию
Если в спецификации типа данных нет явного значения DEFAULT, MySQL определяет значение по умолчанию следующим образом:
Если столбец может принимать значение NULL, столбец определен с явным оператором DEFAULT
NULL.
Если столбец не может принимать значение NULL, MySQL определяет столбец без явного оператора DEFAULT.
Для ввода данных в столбец 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.10, «Режимы SQL сервера».
Для данной таблицы оператор SHOW CREATE
TABLE отображает столбцы, для которых указан явный оператор DEFAULT.
Неявные значения по умолчанию определяются следующим образом:
Для числовых типов значением по умолчанию является
0, за исключением целочисленных или чисел с плавающей точкой типов, объявленных с атрибутомAUTO_INCREMENT, в этом случае значением по умолчанию является следующее значение в последовательности.Для типов даты и времени, кроме
TIMESTAMP, значением по умолчанию является соответствующее значение “ноль” для типа. Это также верно дляTIMESTAMP, если системная переменнаяexplicit_defaults_for_timestampвключена (см. Раздел 5.1.7, «Системные переменные сервера»). В противном случае, для первого столбца типаTIMESTAMPв таблице значением по умолчанию является текущая дата и время. См. Раздел 11.2, «Типы данных даты и времени».Для строковых типов, кроме
ENUM, значением по умолчанию является пустая строка. ДляENUM— это первое значение перечисления.
© 2025 Oracle
Licensed under the GPLv2 License.