Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #52, МАРТ 2005 г.

MySQL в разрезе

Никита Кислицин

Спецвыпуск: Хакер, номер #052, стр. 052-036-5


Изменения, что называется, налицо: в MySQL 4.0 закриптованный пароль выглядит как 6f8c114b58f2ce9e, а в 4.1 уже совсем по-другому: *43c8aa34cdc98eddd3de1fe9a9c2c2a9f92bb2098d75.

Собственные процедуры

В пятой версии MySQL добавилась глобально новая возможность создания собственных хранимых функций и процедур. Что это такое? Фактически, это набор некоторых sql-выражений, которые хранятся на сервере и в которые можно подставлять собственные параметры. В MySQL работа с функциями и процедурами реализована в соответствии со стандартом SQL-2003, так что многие системы, разработанные, скажем, под DB2, будут во многом совместимы с MySQL. Как можно описать собственную процедуру? Проще простого:

CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)

BEGIN

RETURN CONCAT('Hello, ',s,'!');

END

Этот простейший пример выведет Hello <подставленный параметр>. Однако если попробовать выполнить этот запрос, тебя постигнет неудача - возникнет ошибка. В чем дело? В том, что символ ";" в sql обозначает конец команды. Получается, наше выражение и в самом деле некорректно и не соответствует грамматике sql. Поэтому, чтобы добавить такую функцию, нужно поменять символ, обозначающий концовку предложения, с ";" на что-то более нейтральное. Например, на три звездочки. Делается это при помощи процедуры delimiter вот так:

Delimiter ***;

И теперь уже можно спокойно набрать любую процедуру, а символ ";" не помешает. После того как процедура или функция будут введены, необходимо выполнить команду, состоящую из "***", что укажет на конец предложения. Затем изменяем delimiter на прежнее значение:

Delimiter ;

Чтобы было проще разобраться, приведу еще один простенький пример процедуры, которая считает число записей в таблице user:

CREATE PROCEDURE proc (OUT param1 INT)

BEGIN

SELECT COUNT(*) INTO param1 FROM user;

END

Вызов такой процедуры реализуется вот так:

CALL proc(@te);

Теперь в @te лежит результат работы процедуры. Посмотреть его можно запросом select:

SELECT @te;

Выводы

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

История MySQL

MySQL создал Михаил Видениус, проживающий в Швеции и скрывающийся под ником Monty. В 1979 году этот скромный паренек разработал средство для управления базами данных, которое назвал каким-то странным словом - UNIREG. UNIREG была расширена, чтобы поддерживать большие базы данных, и была фактически переписана. В 1994 году компания, в которой работал Миша, стала заниматься разработкой web-приложений и использовать UNIREG в своих проектах. Однако со временем стало ясно, что этот продукт совершенно не подходит для нужд web-систем, поэтому Миша решил связаться с разработчиком mSQL – Хьюзом. Миша хотел одного: подключить mSQL к своему UNIREG’у, но Хьюз оказался цепким парнем и, почуяв успех, присоединился к Мише в его разработках.

Назад на стр. 052-036-4  Содержание  Вперед на стр. 052-036-6