Введение
В этой лабораторной работе вы научитесь создавать и использовать пользовательские функции в MySQL. Лабораторная работа посвящена инкапсуляции повторно используемой логики в вашей базе данных путем создания функции для расчета площади прямоугольника.
Шаги включают подключение к серверу MySQL, создание базы данных (при необходимости), определение функции calculate_rectangle_area с входными параметрами для длины и ширины, а также указание типа возвращаемых данных. Тело функции вычисляет площадь и возвращает результат. Последующие шаги будут охватывать использование этой функции в запросе SELECT, тестирование ее вывода с использованием образца данных и, наконец, удаление функции.
Подключение к MySQL и создание базы данных
На этом этапе вы подключитесь к серверу MySQL и создадите базу данных, в которой будете создавать и использовать свою пользовательскую функцию.
Сначала откройте терминал и подключитесь к серверу MySQL от имени пользователя root. Выполните следующую команду один раз в начале лабораторной работы:
sudo mysql -u root
Эта команда использует sudo для запуска клиента mysql от имени пользователя root. Поскольку у пользователя root в этой среде не установлен пароль, вы будете подключены напрямую к оболочке MySQL. Вы увидите приглашение mysql>.
Оставайтесь в оболочке MySQL для всех последующих шагов. Не выходите до конца лабораторной работы.
Теперь давайте создадим базу данных с именем my_functions_db. Эта база данных будет использоваться для хранения нашей таблицы и функции. Выполните следующую SQL-команду в приглашении mysql>:
CREATE DATABASE IF NOT EXISTS my_functions_db;
После создания базы данных выберите ее, чтобы сделать ее базой данных по умолчанию для последующих операций:
USE my_functions_db;
Вы должны увидеть сообщение о том, что база данных была изменена.
Теперь вы подключены к базе данных my_functions_db и готовы к созданию своей пользовательской функции на следующем шаге.
Создание функции для расчета площади прямоугольника
На этом этапе вы создадите пользовательскую функцию в MySQL для расчета площади прямоугольника. Эта функция будет принимать длину и ширину в качестве входных данных и возвращать рассчитанную площадь.
Убедитесь, что вы все еще находитесь в оболочке MySQL и уже выбрали базу данных my_functions_db, как описано в предыдущем шаге.
Теперь давайте создадим функцию с именем calculate_rectangle_area. Эта функция будет принимать два целочисленных параметра, length и width, и возвращать целое число, представляющее площадь.
Выполните следующую SQL-команду в оболочке MySQL:
DELIMITER //
CREATE FUNCTION calculate_rectangle_area (length INT, width INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE area INT;
SET area = length * width;
RETURN area;
END //
DELIMITER ;
Разберем эту команду:
DELIMITER //: Это изменяет разделитель операторов с точки с запятой (;) по умолчанию на//. Это необходимо, поскольку определение функции содержит точки с запятой внутри своего тела.CREATE FUNCTION calculate_rectangle_area (length INT, width INT): Это определяет имя функции (calculate_rectangle_area) и ее входные параметры (lengthиwidth, оба типаINT).RETURNS INT: Это указывает, что функция будет возвращать целочисленное значение.DETERMINISTIC: Это ключевое слово указывает, что функция всегда будет выдавать одинаковый результат для одинаковых входных значений. Это помогает MySQL оптимизировать запросы, использующие функцию.BEGIN ... END: Этот блок содержит логику функции.DECLARE area INT;: Это объявляет локальную переменную с именемareaтипаINTвнутри функции.SET area = length * width;: Это вычисляет площадь, умножая параметрыlengthиwidth, и присваивает результат переменнойarea.RETURN area;: Это возвращает значение, хранящееся в переменнойarea, в качестве выходных данных функции.END //: Это отмечает конец определения функции, используя временный разделитель//.DELIMITER ;: Это возвращает разделитель обратно к точке с запятой (;) по умолчанию.
После выполнения этой команды функция calculate_rectangle_area будет создана в базе данных my_functions_db.
Чтобы убедиться, что функция была успешно создана, вы можете вывести список функций в текущей базе данных:
SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';
Эта команда отобразит информацию о функции, подтвердив ее существование.
Использование функции в запросе SELECT
Теперь, когда вы создали функцию calculate_rectangle_area, вы можете использовать ее в запросе SELECT для расчета площади прямоугольников на основе данных, хранящихся в таблице.
Продолжайте работать в той же сессии оболочки MySQL и убедитесь, что вы по-прежнему используете базу данных my_functions_db.
Сначала давайте создадим таблицу с именем rectangles для хранения размеров различных прямоугольников. Выполните следующую SQL-команду:
CREATE TABLE IF NOT EXISTS rectangles (
id INT AUTO_INCREMENT PRIMARY KEY,
length INT,
width INT
);
Эта команда создает таблицу с автоматически увеличивающимся id в качестве первичного ключа и столбцами для length и width.
Далее, вставьте некоторые примеры данных в таблицу rectangles:
INSERT INTO rectangles (length, width) VALUES (5, 10);
INSERT INTO rectangles (length, width) VALUES (7, 8);
INSERT INTO rectangles (length, width) VALUES (12, 3);
Эти команды добавляют три строки в таблицу rectangles с различными значениями длины и ширины.
Теперь вы можете использовать функцию calculate_rectangle_area в запросе SELECT для получения размеров прямоугольников и их рассчитанных площадей. Выполните следующую SQL-команду:
SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;
В этом запросе:
SELECT id, length, width: Это выбирает столбцыid,lengthиwidthиз таблицыrectangles.calculate_rectangle_area(length, width): Это вызывает функциюcalculate_rectangle_area, передавая значения из столбцовlengthиwidthкаждой строки в качестве аргументов.AS area: Это присваивает псевдонимareaрезультату, возвращаемому функцией, делая выходной столбец более читаемым.FROM rectangles: Это указывает, что данные должны быть получены из таблицыrectangles.
Результат этого запроса покажет id, length, width и рассчитанную area для каждого прямоугольника в таблице. Вы должны увидеть вывод, похожий на этот:
+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
| 1 | 5 | 10 | 50 |
| 2 | 7 | 8 | 56 |
| 3 | 12 | 3 | 36 |
+----+--------+-------+------+
Это демонстрирует, как эффективно использовать вашу пользовательскую функцию в стандартном SQL-запросе для выполнения вычислений над вашими данными.
Тестирование вывода функции с использованием примеров данных
На этом этапе вы продолжите тестирование функции calculate_rectangle_area, вставив больше примеров данных в таблицу rectangles и проверив рассчитанные площади. Это поможет убедиться, что функция корректно работает с различными входными значениями.
Продолжайте работать в той же сессии оболочки MySQL и убедитесь, что вы по-прежнему используете базу данных my_functions_db.
Теперь вставьте дополнительные строки в таблицу rectangles с различными значениями длины и ширины:
INSERT INTO rectangles (length, width) VALUES (10, 10);
INSERT INTO rectangles (length, width) VALUES (2, 5);
INSERT INTO rectangles (length, width) VALUES (15, 4);
Эти команды добавляют еще три строки в таблицу rectangles.
Теперь снова выполните запрос SELECT, чтобы увидеть рассчитанные площади для всех прямоугольников, включая только что добавленные:
SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;
Вывод теперь будет включать площади для новых прямоугольников:
+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
| 1 | 5 | 10 | 50 |
| 2 | 7 | 8 | 56 |
| 3 | 12 | 3 | 36 |
| 4 | 10 | 10 | 100 |
| 5 | 2 | 5 | 10 |
| 6 | 15 | 4 | 60 |
+----+--------+-------+------+
Просмотрите вывод и убедитесь, что рассчитанные площади для новых строк верны:
- Для длины 10 и ширины 10 площадь составляет 100 (10 * 10).
- Для длины 2 и ширины 5 площадь составляет 10 (2 * 5).
- Для длины 15 и ширины 4 площадь составляет 60 (15 * 4).
Этот шаг закрепляет ваше понимание того, как использовать функцию с различными данными, и подтверждает ее точность.
Удаление функции и таблицы
На этом заключительном этапе вы очистите базу данных, удалив функцию calculate_rectangle_area и таблицу rectangles. Это хорошая практика — удалять объекты, которые вам больше не нужны.
Продолжайте работать в той же сессии оболочки MySQL и убедитесь, что вы по-прежнему используете базу данных my_functions_db.
Сначала удалим функцию calculate_rectangle_area. Выполните следующую SQL-команду:
DROP FUNCTION IF EXISTS calculate_rectangle_area;
DROP FUNCTION: Эта команда используется для удаления функции.IF EXISTS: Этот параметр предотвращает ошибку, если функция не существует.
Далее удалим таблицу rectangles. Выполните следующую SQL-команду:
DROP TABLE IF EXISTS rectangles;
DROP TABLE: Эта команда используется для удаления таблицы.IF EXISTS: Этот параметр предотвращает ошибку, если таблица не существует.
После выполнения этих команд функция и таблица будут удалены из базы данных my_functions_db.
Чтобы убедиться, что функция была удалена, вы можете попытаться снова вывести список функций:
SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';
Эта команда теперь должна вернуть пустой набор результатов, указывая на то, что функция удалена.
Чтобы убедиться, что таблица была удалена, вы можете попытаться выбрать из нее данные:
SELECT * FROM rectangles;
Эта команда должна вернуть ошибку, похожую на ERROR 1146 (42S02): Table 'my_functions_db.rectangles' doesn't exist, указывающую на то, что таблица удалена.
Теперь вы можете выйти из оболочки MySQL, набрав exit и нажав Enter.
Вы успешно создали, использовали, протестировали и удалили пользовательскую функцию и таблицу в MySQL.
Резюме
В этой лабораторной работе вы научились создавать функции в MySQL для инкапсуляции повторно используемой логики. Процесс включал подключение к серверу MySQL, создание базы данных (при необходимости), а затем определение функции с входными параметрами, типом возвращаемых данных и ключевым словом DETERMINISTIC.
В частности, вы создали функцию calculate_rectangle_area, которая принимает длину и ширину прямоугольника в качестве входных данных и возвращает его площадь. Тело функции включало объявление локальной переменной для хранения рассчитанной площади и использование оператора RETURN для возврата результата.
Затем вы узнали, как использовать эту функцию в запросе SELECT для выполнения расчетов над данными, хранящимися в таблице. Вы также протестировали функцию с дополнительными примерами данных, чтобы убедиться в ее точности. Наконец, вы узнали, как удалить функцию и таблицу для очистки вашей среды базы данных.
Эта лабораторная работа предоставила практическое введение в создание и использование пользовательских функций в MySQL, что является ценным навыком для инкапсуляции логики и повышения эффективности операций с базами данных.



