Spec-Zone .ru
спецификации, руководства, описания, API

1.8.6.3. Ограничения на Недопустимые Данные

По умолчанию MySQL является прощающим из недопустимых или неподходящих значений данных и принуждает их к допустимым значениям для ввода данных. Однако, можно изменить режим SQL сервера, чтобы выбрать более традиционную обработку плохих значений так, что, сервер отклоняет их и прерывает оператор, в котором они происходят. См. Раздел 5.1.7, "Режимы SQL Сервера".

Этот раздел описывает значение по умолчанию (прощающее) поведение MySQL, так же как строгий режим SQL и как это отличается.

Если Вы не используете строгий режим, то всякий раз, когда Вы вставляете "неправильное" значение в столбец, такой как a NULL в a NOT NULL столбец или также большое числовое значение в числовой столбец, MySQL устанавливает столбец в "самое лучшее значение" вместо того, чтобы произвести ошибку: следующие правила описывают более подробно, как это работает:

Причина использования предыдущих правил в нестрогом режиме состоит в том, что мы не можем проверить эти условия, пока оператор не начал выполняться. Мы не можем просто откатывать, если мы встречаемся с проблемой после обновления нескольких строк, потому что механизм хранения, возможно, не поддерживает откат. Опция завершения оператора не то, что хороша; в этом случае обновление было бы "наполовину сделано,", который является, вероятно, худшим сценарием. В этом случае лучше "сделать лучшее, которое Вы можете" и затем продолжать, как будто ничто не произошло.

В MySQL 5.0.2 и, можно выбрать более строгую обработку входных значений при использовании STRICT_TRANS_TABLES или STRICT_ALL_TABLES Режимы SQL:

SET sql_mode = 'STRICT_TRANS_TABLES';SET sql_mode = 'STRICT_ALL_TABLES';

STRICT_TRANS_TABLES включает строгому режиму для транзакционных механизмов хранения, и также до некоторой степени для нетранзакционных механизмов. Это работает как это:

Для еще более строгой проверки включить STRICT_ALL_TABLES. Это - то же самое как STRICT_TRANS_TABLES за исключением того, что для нетранзакционных механизмов хранения, ошибки прерывают оператор даже для неправильных данных в строках после первой строки. Это означает, что, если ошибка происходит отчасти через многократную строку, вставляют или обновляют для нетранзакционной таблицы, частичное обновление заканчивается. Более ранние строки вставляются или обновляются, но те от точки ошибки на не. Чтобы избежать этого для нетранзакционных таблиц, или используйте операторы единственной строки или иначе использование STRICT_TRANS_TABLES если предупреждения преобразования, а не ошибки являются приемлемыми. Чтобы избежать проблем во-первых, не используйте MySQL для контента контрольного столбца. Является самым безопасным (и часто быстрее) позволить приложению гарантировать, что это передает только допустимые значения к базе данных.

С любой из строгих опций режима можно заставить ошибки быть обработанными как предупреждения при использовании INSERT IGNORE или UPDATE IGNORE вместо INSERT или UPDATE без IGNORE.