Creating and running MySQL stored functions and procedures
This guide explains how to create and execute MySQL stored functions and procedures, which can enhance database security, maintain data integrity, and improve performance.
Stored Functions
Section titled “Stored Functions”Stored functions in MySQL allow you to manipulate and process data efficiently.
Setting Up a Test Database
Section titled “Setting Up a Test Database”- Create a test database:
CREATE DATABASE username_test;- Select the database:
USE username_test;- Create a
productstable:
CREATE TABLE products ( prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));- Insert sample data:
INSERT INTO products (prod_name, prod_cost, prod_price)VALUES('Basic Widget', 5.95, 8.35),('Micro Widget', 0.95, 1.35),('Mega Widget', 99.95, 140.00);Creating a Stored Function
Section titled “Creating a Stored Function”Create a function calcProfit that calculates profit by subtracting cost from price:
DELIMITER $$CREATE FUNCTION calcProfit(cost FLOAT, price FLOAT) RETURNS DECIMAL(9,2)BEGIN DECLARE profit DECIMAL(9,2); SET profit = price - cost; RETURN profit;END$$DELIMITER ;Using the Stored Function
Section titled “Using the Stored Function”Run a query using the function:
SELECT *, calcProfit(prod_cost, prod_price) AS profit FROM products;Sample output:
+---------+--------------+-----------+------------+--------+| prod_id | prod_name | prod_cost | prod_price | profit |+---------+--------------+-----------+------------+--------+| 1 | Basic Widget | 5.95 | 8.35 | 2.40 || 2 | Micro Widget | 0.95 | 1.35 | 0.40 || 3 | Mega Widget | 99.95 | 140.00| 40.05 |+---------+--------------+-----------+------------+--------+Stored Procedures
Section titled “Stored Procedures”Stored procedures differ from stored functions in that they must be invoked with the CALL statement.
Creating a Stored Procedure
Section titled “Creating a Stored Procedure”Example of a basic procedure procedureTest that selects product names:
DELIMITER $$CREATE PROCEDURE procedureTest()BEGIN SELECT prod_name FROM products;END$$DELIMITER ;Executing the Stored Procedure
CALL procedureTest() \GIf using phpMyAdmin, omit the \G at the end.
More Information
Section titled “More Information”For full details on MySQL stored procedures and functions, see MySQL Documentation.