MySQL 5.0. Библиотека программиста | страница 53



• если вы установили для столбца свойство NOT NULL, но не задали значение по умолчанию, а при вставке строки не указали значение для этого столбца, то в столбец будет добавлено следующее значение:

– для числовых столбцов – 0, а если задано свойство AUTO_INCREMENT, то очередной порядковый номер;

– для столбцов с типом даты и времени – нулевая дата и/или время (0000–0000 00:00:00), а для первого в таблице столбца с типом TIMESTAMP – текущая дата и время;

– для символьных столбцов – пустая строка, а для столбца с типом ENUM – первый из элементов списка.

При этом операция добавления завершается успешно и генерируется предупреждение, которое можно просмотреть, выполнив после команды INSERT команду

SHOW WARNINGS;

...

Внимание!

В любом из режимов попытка добавить повторяющееся значение в столбец первичного ключа или уникального индекса вызывает ошибку и прекращение выполнения операции. Также в любом из режимов вызывает ошибку и отмену операции попытка добавить во внешний ключ таблицы с типом InnoDB значение, отсутствующее в первичном ключе родительской таблицы.

Если в значении переменной sql_mode содержится ключевое слово STRICT_ TRANS_TABLES или STRICT_ALL_TABLES, значит, сервер работает в строгом режиме. Для таблиц с поддержкой транзакций (то есть таблиц с типом InnoDB) эти два режима эквивалентны и действуют одинаково. При попытке вставки некорректного значения операция INSERT полностью отменяется (то есть в таблицу не загружается ни одна из добавляемых строк, даже если некорректное значение обнаружено только в одной из них) и выдается сообщение об ошибке.

Для таблиц, не поддерживающих транзакции (то есть таблиц с типом MyISAM и др.), режимы STRICT_TRANS_TABLES или STRICT_ALL_TABLES функционируют следующим образом:

• если некорректное значение обнаружено в первой из добавляемых строк, операция INSERT полностью отменяется и выдается сообщение об ошибке (то есть результат выполнения такой же, как для таблиц InnoDB);

• если установлен режим STRICT_TRANS_TABLES, а некорректное значение обнаружено в одной из последующих добавляемых строк, то некорректное значение преобразуется в допустимое и генерируется предупреждение (как в нестрогом режиме);

• если установлен режим STRICT_ALL_TABLES, а некорректное значение обнаружено в одной из последующих добавляемых строк, то операция частично отменяется: строки, предшествующие ошибочной строке, добавляются в таблицу, а ошибочная и следующие за ней – игнорируются. В связи с этим в таблицы, не поддерживающие транзакции, рекомендуется добавлять по одной строке в каждой команде INSERT.