Курсоры в MySQL 5

Начиная с 5-ой версии, MySQL имеет возможность создавать курсоры. Курсор — это виртуальная таблица, предоставляющая альтернативный способ просмотра табличных данных. Курсор не содержит данных, а лишь ссылается на них из других таблиц. Из этого вытекает ряд особенностей, но об этом ниже.

Обычный запрос выборки из таблицы выглядит примерно так:

 

SELECT `id`, `name`, `family`, `age`, `place`, `price` FROM `girls`;

Однако не всегда удобно использовать такой длинный запрос. Гораздо проще использовать курсор:
 
CREATE VIEW c_girls AS
SELECT `id`, `name`, `family`, `age`, `place`, `price` FROM `girls`;

Теперь, чтобы выбрать все записи, достаточно запроса:
 
SELECT * FROM c_girls;

Ну или для тех, кто любит помоложе
 
SELECT * FROM c_girls WHERE age < 25;

Разумеется, нельзя использовать в выборке столбцы, не включенные в курсор.

В определение курсора можно включать инструкции сортировки, группировки и т. д. Например:
 
CREATE VIEW c_girls AS
SELECT `id`, `name`, `family`, `age`, `place`, `price` FROM `girls` ORDER BY age LIMIT 7;

Что мне особенно нравится, так это возможность компоновки курсора из множества таблиц. Я часто использую эту возможность в проектах, но об этом смотрите чуть ниже.

В начале я говорил об особенностях курсоров. Сейчас самое время рассказать о них. Как уже было упомянуто, курсор – это виртуальная таблица. Это значит, что в некоторых случаях курсор не обновляем. То есть нельзя модифицировать/удалять/добавлять записи через курсор. Это справедливо только тогда, когда курсор ссылается на несколько таблиц. В этом случае нельзя четко определить, к каким таблицам относятся изменения, а к каким нет. Курсор обновляем только когда он ссылается на одну таблицу (а не на производные выражения). Впрочем в своей практике я практически никогда не пользуюсь добавлением записей через курсор.

Более полную информацию о синтаксисе и возможностях курсоров, вы как всегда можете прочитать на сайте MySQL

 

Нафига?


Что даёт нам использование курсоров в реальных проектах? Мой ответ – Упрощение.

Ясно, что курсор не напишет код за вас. Но он упрощает работу с объектами реального мира, описанными в базе. Мы можем создать курсор main_book_info с основной информацией о товаре, и курсор full_book_info с более полной информацией. Такой прием сокращает код и позволяет быстрее ориентироваться в нём.
Сравните:
 
SELECT id, (SELECT author.name FROM author) as Author_Name…

или так:
 
SELECT * FROM main_book_info

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

В общем применение курсоров ограничено лишь вашей фантазией. А я их просто люблю…
 

Автор: http://afanasyev.habrahabr.ru/



Опубликовал admin
8 Окт, Среда 2008г.



Программирование для чайников.