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

5.1.7. Режимы SQL сервера

Сервер MySQL может работать в различных режимах SQL, и может применить эти режимы по-другому для различных клиентов. Эта возможность позволяет каждому приложению адаптировать рабочий режим сервера в соответствии со своими собственными требованиями.

Для ответов на некоторые вопросы, которые часто спрашивают о режимах SQL сервера в MySQL, см. Раздел B.3, "FAQ MySQL 5.7: Режим SQL Сервера".

Режимы определяют то, что должен поддерживать MySQL синтаксиса SQL и какое подтверждение правильности данных проверяет, что должно выполнить. Это облегчает использовать MySQL в различных средах и использовать MySQL вместе с другими серверами баз данных.

Работая с InnoDB таблицы, рассмотрите также innodb_strict_mode параметр конфигурации. Это включает дополнительным проверкам на ошибки на InnoDB таблицы, как перечислено в Разделе 14.2.5.7,"InnoDB Строгий Режим".

Установка Режима SQL

Можно установить режим SQL значения по умолчанию, запускаясь mysqld с --sql-mode="modes" опция, или при использовании sql-mode="modes" в my.cnf (Операционные системы Unix) или my.ini (Windows). modes список различных режимов, разделенных запятой (",") символы. Режим SQL значения по умолчанию в MySQL 5.7 NO_ENGINE_SUBSTITUTION. Чтобы очистить режим явно, установите это в пустое строковое использование --sql-mode="" на командной строке, или с sql-mode="" в my.cnf на системах Unix или в my.ini на Windows.

Можно изменить режим SQL во времени выполнения при использовании a SET [GLOBAL|SESSION] sql_mode='modes' оператор, чтобы установить sql_mode системное значение. Установка GLOBAL переменная требует SUPER полномочие и влияет на работу всех клиентов, которые соединяются с того времени на. Установка SESSION переменная влияет только на текущий клиент. Любой клиент может изменить его собственный сеанс sql_mode значение в любое время.

Важный

Режим SQL и определяемое пользователем разделение. Изменение режима SQL сервера после создания и вставки данных в разделенные таблицы может вызвать существенные изменения в поведении таких таблиц, и могло привести к потере или повреждению данных. Строго рекомендуется, чтобы Вы никогда не изменили режим SQL, как только Вы составили таблицы, использующие определяемое пользователем разделение.

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

См. Раздел 17.6, "Ограничения и Ограничения на Разделение", для получения дополнительной информации.

Можно получить текущую глобальную переменную или сеанс sql_mode значение со следующими операторами:

SELECT @@GLOBAL.sql_mode;SELECT @@SESSION.sql_mode;

Большинство Важных Режимов SQL

Самое важное sql_mode значения - вероятно, они:

Когда это руководство относится к "строгому режиму," это означает режим где по крайней мере один из STRICT_TRANS_TABLES или STRICT_ALL_TABLES включается.

Полный список Режимов SQL

Следующий список описывает все поддерживаемые режимы:

Строгий режим управляет, как MySQL обрабатывает входные значения, которые являются недопустимыми или недостающими. Значение может быть недопустимым по нескольким причинам. Например, у этого мог бы быть неправильный тип данных для столбца, или это могло бы испытать недостаток диапазона. Значение отсутствует, когда новая строка, которая будет вставлена, не содержит значение для не -NULL столбец, который имеет не явный DEFAULT пункт в его определении. (Для a NULL столбец, NULL вставляется, если значение отсутствует.)

Для транзакционных таблиц ошибка происходит для недопустимых или отсутствующих значений в операторе когда любой из STRICT_ALL_TABLES или STRICT_TRANS_TABLES режимы включаются. Оператор прерывается и откатывается.

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

Строгий режим отвергает недопустимые значения даты такой как '2004-04-31'. Это не отвергает даты с нулевыми частями месяца или дня такой как '2004-04-00' или "нулевые" даты. Чтобы отвергнуть их также, включите NO_ZERO_IN_DATE и NO_ZERO_DATE Режимы SQL в дополнение к строгому режиму.

Если Вы не используете строгий режим (то есть, ни один STRICT_TRANS_TABLES ни STRICT_ALL_TABLES включается), MySQL вставляет скорректированные значения для недопустимых или отсутствующих значений и производит предупреждения. В строгом режиме можно произвести это поведение при использовании INSERT IGNORE или UPDATE IGNORE. См. Раздел 13.7.5.39,"SHOW WARNINGS Синтаксис".

Строгий режим не влияет, проверяются ли ограничения внешнего ключа. foreign_key_checks может использоваться для этого. (См. Раздел 5.1.4, "Системные Переменные Сервера".)

Режимы комбинации

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

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