|
FROM people
WHERE password = ENCRYPT(name, LEFT(name, 2))
Наконец, MySQL поддерживает более сильный тип объединения, чем простое
внутреннее объединение, которое мы до сих пор использовали. Именно, MySQL
поддерживает так называемое левое внешнее объединение (известное также просто
как внешнее объединение). Объединение этого типа похоже на внутреннее
объединение, за исключением того, что в него включаются данные из левой колонки,
которым нет соответствия в правой колонке. Если вы обратитесь к нашим таблицам
с авторами и книгами, то вспомните, что в наше объединение не вошли авторы, у
которых в базе данных не было книг. Часто вы можете пожелать вывести записи из
одной таблицы, для которых нет соответствия в другой таблице, с которой
производится объединение. Это можно сделать с помощью внешнего объединения:
SELECT book.title, author.name
FROM author
LEFT JOIN book ON book.author = author.id
Обратите внимание, что во внешнем объединении вместо WHERE используется
ключевое слово ON. Результат нашего запроса будет выглядеть так:
MySQL делает следующий шаг, позволяя использовать естественное внешнее
объединение (natural outer join). Естественное внешнее объединение соединяет
строки двух таблиц, в которых две колонки имеют одинаковые имена и тип, и
значения в этих колонках совпадают:
SELECT my_prod.name
FROM my_prod
NATURAL LEFT JOIN their_prod
Особенности mSQL
В mSQL есть пять «системных переменных», которые можно включить в любой запрос.
Об одной из этих переменных, _seq, мы уже говорили. Остальные переменные
следующие:
_rowid
Уникальный идентификатор возвращенной строки данных. Для повышения
производительности можно использовать эту переменную в командах UPDATE или
DELETE. Однако такой подход нельзя рекомендовать определенно, поскольку разные
клиенты могут помешать друг другу. Например, два клиента могут выбрать одну и
ту же строку. Первый клиент удаляет ее, а затем третий клиент добавляет новую
строку. Новая строка может получить то же значение _rowid, что и удаленная
строка. Если теперь второй клиент попытается отредактировать или удалить строку,
используя данное значение _rowid, то результат будет совсем не тот, на который
он рассчитывал.
_timestamp
Время последней модификации строки. В текущей версии mSQL имеет стандартный
формат времени Unix. В будущих версиях формат может измениться, поэтому
использовать эту переменную следует только для сравнения временных меток разных
строк.
_sysdate
Возвращает значение текущей даты на сервере mSQL. Может использоваться для
синхронизации времени в базе данных, даже если у клиентов на машинах стоит
разное время. Имеет стандартный формат Unix.
_user
Содержит имя клиента текущего соединения. Как и _-sysdate, не зависит от
таблицы, из которой выбирается.
Глава №7.
Другие СУБД среднего масштаба
Когда mSQL впервые вышла на сцену, это была единственная СУБД среднего масштаба
с поддержкой SQL. Но она недолго оставалась в одиночестве. Конечно, вы уже
знаете о другой такой базе данных: MySQL. За годы, прошедшие после появления
mSQL, появилось и несколько СУБД среднего класса. Мы сосредоточились в этой
книге на MySQL и mSQL из-за их очень большого сходства и громадной популярности.
Было бы, однако, несправедливо не упомянуть о других базах данных.
Базы данных используются в столь многочисленных задачах, что трудно в одном
пакете соединить все функции для всех возможных применений. Тем не менее
крупные поставщики баз данных пытаются достичь этой цели. Они расплачиваются за
это производительностью, а вы расплачиваетесь своими деньгами. С другой стороны,
базы данных низшего класса настолько узко специализированы, что возможности их
использования на малых предприятиях, в некоммерческих организациях и других
местах с нетривиальными потребностями весьма ограниченны. Базы данных среднего
класса заполняют важный пробел между двумя этими крайностями. До сего времени
мы рассматривали лишь два очень схожих подхода к удовлетворению потребности в
базе данных среднего класса. Определенно, они не являются единственными
решениями. Если, скажем, ваша компания невелика, это не значит, что вам не
может потребоваться поддержка транзакций. Некоторым пользователям среднего
звена могут потребоваться также триггеры, вложенные запросы, хранимые процедуры,
поддержка объектно-ориентированного программирования и многое другое - но не
все эти возможности одновременно. Таким образом, различные базы данных среднего
класса могут иметь необходимые возможности, отсутствующие в MySQL или mSQL.
Что значит «бесплатный»?
Иногда можно слышать, как MySQL и mSQL называют «бесплатными» (free) продуктами.
Когда сравнивают MySQL и mSQL, иногда даже говорят, что MySQL «более
бесплатна», чем mSQL. Здравый смысл противится выражению «более бесплатный».
Однако в мире программного обеспечения действительно изобретены «степени
|
|