17. Внимание! Не пытайтесь на боевом сервере менять
значение SQL mode.
Смена режима SQL mode после создания и вставки
данных в таблицы типа «partition» может привести к
потере или повреждению данных!
При репликации партиционных таблиц, отличающиеся
параметры SQL mode на Primary и Slave MySQL
серверах также может привести к проблемам. Для
стабильной работы репликации между серверами,
настройки SQL mode должны быть идентичными.
18. SQL modes – это настройка поведения работы сервера
MySQL, состоящая из режимов, каждый из которых
контролирует какой-либо один аспект обработки
запроса.
1. Устанавливает строгую или мягкую проверку входных
данных
2. Включает или отключает следование SQL стандарту
3. Обеспечивает лучшую синтаксическую
совместимость с другими БД
22. IGNORE_SPACE
Заставляет сервер игнорировать пробелы между
именем функции и скобкой, что позволяет
устанавливать пробелы между названием функции и
открывающейся скобкой. При этом имена всех функций
становятся зарезервированными.
23. ERROR_FOR_DIVISION_BY_ZERO
При делении на ноль в строгом режиме генерируется
ошибка (или предупреждение, если не включён строгий
режим) во время выполнения операторов INSERT и
UPDATE. Без этого параметра деление на ноль
возвращает предупреждение и вставляет в таблицу
NULL.
27. Строгость распространяется на:
1. Поверка входных данных на соответствие
заданному типу
2. Нахождение внутри диапазона для чисел и дат
3. При вставке данных пропущено значение колонки,
для которой не задано значение по умолчанию и
имеет атрибут NOT NULL
4. Длина значения выходит за пределы заданного
диапазона
5. Для типов ENUM и SET отсутствует вставляемое
или обновляемое значение
28. STRICT_ALL_TABLES
STRICT_ALL_TABLES полностью соответствует
STRICT_TRANS_TABLES, но действие параметра уже
распространяется на все виды баз данных MySQL, а не
только на те, которые поддерживают транзакции.
Из-за разницы подходов к работе транзакционных и не
транзакционных таблиц не всегда есть смысл
использовать данный режим.
29. TRADITIONAL
Заставляет MySQL вести себя как большинство
«традиционных» баз данных SQL.
Данный режим является композитным режимом,
включающий в себя «строгий режим», а также ряд
других режимов.
30. ANSI
Композитный режим, заставляет MySQL быть «ANSIподобным», т.е. приближенным к стандарту SQL.
Включает в себя: REAL_AS_FLOAT,
PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE.
REAL_AS_FLOAT – тип данных real является
синонимом float, а не double.
PIPES_AS_CONCAT – разрешает использовать для
конкатенации строк | | , вместо логического ИЛИ.
33. • Возвращает ошибку.
• Для транзакционных таблиц откатывает транзакцию
(rollback).
Для не транзакционных таблиц отменяет изменение в
таблице.
Следует учесть, что в не транзакционных таблицах
при изменении сразу нескольких строк, в случае
ошибки отменяется только последнее значение,
вместо отката всех параметров.
34.
35. Генерирует ошибку в следующих случаях:
• Тип вставляемых данных отличается от заданного
типа данных
• Пропуск значения в столбце, у которого нет значения
по умолчанию и задан параметр NOT NULL.
• Для чисел и дат – данные находятся вне диапазона
допустимых значений.
• Для строк – превышение допустимой длины.
• Для типа ENUM и SET – значение не является
допустимым для заданного перечисления.
• Для столбца определённого как NOT NULL - вставка
NULL.
37. Порядок обработки данных
1.
2.
Если столбец имеет значение по умолчанию, то
используется это значение и на этом всё
заканчивается, в противном случае происходит
переход к следующему шагу
Если столбец не имеет параметр NOT NULL, то
присваивается NULL и на этом всё заканчивается,
в противном случае поведение зависит от
переменной sql_mode, точнее от строгости самого
режима.
В строгом режиме генерируется ошибка.
38. Значения по умолчанию для
разных типов данных
•
•
•
•
•
В нестрогом режиме происходит неявное
преобразование в дефолтное значение типа данных:
Для типа int значение по умолчанию - ноль.
Для всех строк, кроме типа enum – пустая строка.
Для enum – первый нумерованный член.
Для даты и времени – нулевые значения
'0000-00-00 00:00:00‘
Для timestamp — текущая дата и время, если колонка
была автоматически инициализирована, либо
нулевыми значениями '0000-00-00 00:00:00'
40. Случаи обработки некорректных
данных
• Запросы на модификация данных: INSERT, UPDATE,
REPLACE или LOAD DATA INFILE.
• Обновление описания схем таблиц: ALTER TABLE.
• Задание значения по умолчанию (DEFAULT) в описании
колонок.
В нестрогом режиме значение приводится к
корректному значению и генерируется предупреждение.
Для просмотра ошибок используйте SHOW WARNINGS.
41. Выход из диапазона допустимых
значений
Если число меньше минимального значения допустимого
диапазона, то присваивается минимально-допустимое число. Если
больше максимального – максимально-допустимое.
43. ENUM и SET типы данных
Если присваиваемое значение колонке с типом ENUM
не перечислено в определении ENUM, то MySQL
преобразует его в пустую строку.
Если значение, которое присваивается SET столбцу
содержит элементы, которые не перечислены в
определении SET, то MySQL отбрасывает эти
элементы, сохраняя значения только легальным
элементам.
44.
45. Преобразование в тип даты
При попытке сохранения значения, которое не может
быть преобразовано в тип данных столбца, MySQL
неявно преобразует его в значение по умолчанию для
данного типа.
48. Присвоение NULL
для колонки с NOT NULL
Результат зависит от того, будет вставлена одна строка
или множество в INSERT запрос.
При вставке одной строки возникает ошибка и
изменения не применяются. При множественной
вставке - MySQL неявно преобразует значение по
умолчанию для этого типа данных.
49. ALTER TABLE
При изменении типа данных на колонку налагаются
ограничения нового типа, что может привести к
неожиданному изменению самих данных.
Если на колонку налагается ограничение NOT NULL, то
все NULL значения конвертируются в значения по
умолчанию для заданного типа данных текущей
колонки.
53. Ключевое слово IGNORE
Ключевое слово IGNORE заставляет MySQL
использовать нестрогий режим для запроса. Также
используется для генерации предупреждения вместо
ошибки, при нарушении целостности первичного ключа
(PRIMARY KEY) или уникальности (UNIQUE).
54.
55. ON DUPLICATE KEY UPDATE
Используется для выполнения вставки данных, либо
при их обновлении и нарушении целостности
первичного ключа (PRIMARY KEY) или уникальности
(UNIQUE).