Spec-Zone.ru › MySQL 5.7

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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/data-type-defaults.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API