Чтение онлайн

ЖАНРЫ

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

Гольцман Виктор

Шрифт:

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.

...

Внимание!

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

Если вы задали для столбца таблицы свойство 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.

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

Например, запрос

Поделиться с друзьями: