MySQL 5.0. Библиотека программиста
Шрифт:
SHOW WARNINGS;
Внимание!
В любом из режимов попытка добавить повторяющееся значение в столбец первичного ключа или уникального индекса вызывает ошибку и прекращение выполнения операции. Также в любом из режимов вызывает ошибку и отмену операции попытка добавить во внешний ключ таблицы с типом InnoDB значение, отсутствующее в первичном ключе родительской таблицы.
Если в значении переменной sql_mode содержится ключевое слово STRICT_ TRANS_TABLES или STRICT_ALL_TABLES, значит, сервер работает в строгом режиме. Для таблиц
Для таблиц, не поддерживающих транзакции (то есть таблиц с типом MyISAM и др.), режимы STRICT_TRANS_TABLES или STRICT_ALL_TABLES функционируют следующим образом:
• если некорректное значение обнаружено в первой из добавляемых строк, операция INSERT полностью отменяется и выдается сообщение об ошибке (то есть результат выполнения такой же, как для таблиц InnoDB);
• если установлен режим STRICT_TRANS_TABLES, а некорректное значение обнаружено в одной из последующих добавляемых строк, то некорректное значение преобразуется в допустимое и генерируется предупреждение (как в нестрогом режиме);
• если установлен режим STRICT_ALL_TABLES, а некорректное значение обнаружено в одной из последующих добавляемых строк, то операция частично отменяется: строки, предшествующие ошибочной строке, добавляются в таблицу, а ошибочная и следующие за ней – игнорируются. В связи с этим в таблицы, не поддерживающие транзакции, рекомендуется добавлять по одной строке в каждой команде INSERT.
Внимание!
В любом из режимов числа с дробной частью, добавляемые в целочисленный столбец, округляются до целого, причем такая операция не вызывает ни ошибок, ни предупреждений.
Если вы задали для столбца таблицы свойство NOT NULL (тем самым запретив использовать значение NULL в качестве значения по умолчанию), но не задали отличное от NULL значение по умолчанию (свойство DEFAULT), и если вы удалили значение столбца по умолчанию с помощью команды ALTER TABLE, то в строгом режиме считается, что у такого столбца нет значения по умолчанию. Поэтому при добавлении строки в таблицу необходимо явно задать значение для такого столбца, в противном случае операция INSERT полностью отменяется и выдается сообщение об ошибке. Исключение составляют столбцы с типом TIMESTAMP и ENUM, а также числовые столбцы со свойством AUTO_INCREMENT: для них в случае отсутствия явно заданного значения используются такие же значения, что и в нестрогом режиме.
Изменить режим взаимодействия вашего клиентского приложения с сервером вы можете с помощью команды
SET SQL_MODE = \'<Режим>\
Например, команда
SET SQL_MODE = \'\
устанавливает нестрогий режим, а команды
SET SQL_MODE = \'STRICT_TRANS_TABLES\
и
SET SQL_MODE = \'STRICT_ALL_TABLES\
устанавливают соответствующий строгий режим.
Команда SET SQL_MODE изменяет режим взаимодействия с сервером только для текущего соединения и не влияет на взаимодействие сервера с другими клиентскими приложениями. Новый режим вступает в силу немедленно после выполнения команды и сохраняется только до момента отключения от сервера.
Если же вы хотите, чтобы новый режим действовал глобально (то есть для всех клиентских приложений), необходимо включить в команду изменения режима ключевое слово GLOBAL:SET GLOBAL SQL_MODE = \'<Режим>\
Режим, установленный глобально, применяется для всех вновь подключаемых к серверу клиентских приложений; ранее подключенные приложения продолжают работать в прежнем режиме. Чтобы новый режим вступил в силу для вашего приложения, необходимо отключиться от сервера и затем снова подключиться к нему. Глобальный режим сохраняется до момента перезапуска сервера MySQL.
Внимание!
В отличие от других клиентских приложений, графическая утилита MySQL Query Browser всегда взаимодействует с сервером в глобальном режиме. Установить для нее режим, отличный от установленного глобально, невозможно: команда SET SQL_MODE, выполненная в MySQL Query Browser, игнорируется. Таким образом, чтобы изменить режим для MySQL Query Browser, нужно изменить режим глобально с помощью команды SET GLOBAL SQL_MODE. При изменении глобального режима новый режим применяется к этой утилите сразу же, без переподключения к серверу.
Теперь, когда данные внесены в таблицы, можно пользоваться базой данных для нахождения нужных вам сведений. Об этом и пойдет речь в следующем разделе.
2.5. Извлечение данных из таблиц
Для получения информации из таблиц базы данных используются запросы – SQL-команды, начинающиеся с ключевого слова SELECT. В этом разделе вы познакомитесь со структурой запросов.
Простые запросы
Знакомство с запросами начнем с наиболее простой команды, которая выводит все данные, содержащиеся в таблице:
SELECT * FROM <Имя таблицы>;
Например, в результате выполнения запроса
SELECT * FROM Customers;
вы получите всю информацию о клиентах (см. рис. 2.2 и 2.4).
Примечание
Последующие примеры запросов не будут проиллюстрированы изображениями окон с результатом запроса, поскольку окна различных клиентских приложений при выполнении одного и того же запроса будут отображать один и тот же результат. Мы с вами ограничимся тем, что приведем таблицу, содержащую выводимые запросом данные.
Вместо звездочки можно указать список столбцов таблицы, из которых нужно получить информацию. Например, чтобы вывести только имя, телефон и рейтинг каждого клиента, выполните запрос
SELECT name,phone,rating FROM Customers;
Результатом выполнения этого запроса будет следующий набор данных (табл. 2.4): Таблица 2.4. Результат выполнения запроса
Получать с помощью запроса можно не только значения столбцов, но и значения, вычисленные с помощью выражений.
Например, запросSELECT name,phone,rating/1000 FROM CUSTOMERS;
возвращает результат, аналогичный предыдущему, только значения рейтинга разделены на 1000 (табл. 2.5). Таблица 2.5. Результат выполнения запроса
О функциях и операторах, которые можно использовать в выражениях, подробно будет рассказано в главе 3.
С помощью запросов можно также вычислять значения без обращения к какой-либо таблице.
Например, запрос