Подтвердить что ты не робот

MySQL добавляет столбец NOT NULL

Я добавляю столбец в таблицу:

ALTER TABLE t ADD c varchar(10) NOT NULL;

Столбец добавляется, и каждая запись имеет пустую строку.

Ожидается ли, что это будет работать при всех условиях (строгий режим и т.д.) в MySQL 5.5 +?

4b9b3361

Ответ 1

В MySQL каждый тип столбца имеет "неявное значение по умолчанию" .

Для типов строк [неявное] значение по умолчанию - это пустая строка.

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

Таким образом, исходный DDL дает те же результаты, что и:

-- After this, data will be the same, but schema has an EXPLICIT DEFAULT
ALTER TABLE t ADD c varchar(10) NOT NULL DEFAULT ''
-- Now we're back to the IMPLICIT DEFAULT (MySQL stores NULL internally)
ALTER TABLE t ALTER c DROP DEFAULT

Настройки "строгого" режима влияют на заявления DML, основанные на значениях по умолчанию, но не влияют на неявное использование по умолчанию при добавлении столбца.

Для ввода данных в столбец NOT NULL, у которого нет явного предложения DEFAULT, если оператор INSERT или REPLACE не содержит значения для столбца [и если] установлен строгий режим SQL, возникает ошибка.

Вот sqlfiddle "proof" , что строгий режим не применяется к инструкции ALTER TABLE.. ADD.


1 Это функция MySQL. Другие двигатели, такие как SQL Server, требуют явного ограничения DEFAULT (или NULL) для таких изменений схемы.