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’у, но Хьюз оказался цепким парнем и, почуяв успех, присоединился к Мише в его разработках. |