MySQL stored procedure explained with examples

In MySQL, a stored procedure is a group of MySQL statements that’s executed together when you call the procedure.

A stored procedure is somewhat similar to a function. The main difference is that a stored procedure can only be called with the CALL keyword, while a function can be included in a MySQL statement.

A function needs to return a value, but a procedure only executes statements to manipulate your data without returning a value.

Let’s learn how you create and call a stored procedure. First, create an example table named Cities with the following statement:

  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100),
  PRIMARY KEY (`id`)

To create a stored procedure, you use the CREATE PROCEDURE statement followed with the procedure name as follows:


The SQL code above will create a getCities() procedure that retrieves all rows and columns of the Cities table.

To call the procedure, use the CALL keyword as shown below:

CALL getCities();

You can also declare parameters to pass into the procedure during the call by adding them to the parentheses after the procedure name.

The following example requires you to pass a cityName to the insertCity() procedure:

CREATE PROCEDURE insertCity(cityName VARCHAR(100))
INSERT INTO `Cities` VALUES (NULL, cityName);

You can then call the insertCity() procedure and pass the cityName argument like this:

CALL insertCity('York');

For a simple stored procedure that only has one line, you can immediately write the statement below the CREATE PROCEDURE statement.

But if you have a complex stored procedure with multiple lines, you need to add a DELIMITER clause and the BEGIN ... END compound statement in your CREATE PROCEDURE syntax.

Consider the following example:

CREATE PROCEDURE insertCity(cityName VARCHAR(100))
  INSERT INTO `Cities` VALUES (NULL, cityName);
  SELECT * FROM `Cities`;
END; //

The above procedure will insert a new row into the Cities table, then retrieves all data from the table as an output.

Because the procedure has more than one statement, the delimiter is changed from the default semicolon ; to a double slash // using the DELIMITER keyword.

The change of delimiter symbol causes MySQL to consider statements above as a whole inside the BEGIN ... END statement.

Without defining the delimiter symbol, MySQL will interpret each statement above one by one, causing an error.

Here’s the result of calling the procedure:

CALL insertCity('Bristol');

| id | name     |
|  1 | York     |
|  2 | Bristol  |

And that’s how MySQL stored procedure works. You can add any valid MySQL statements inside the procedure and run them together using the CALL statement.

By storing your statements inside a procedure, you can execute the statements as many times as you need without having to write them in the command line.

Finally, to remove a stored procedure, you can use the DROP PROCEDURE statement as follows:


The IF EXISTS clause is added to prevent MySQL from throwing an error when the procedure doesn’t exist.

Take your skills to the next level ⚡️

I'm sending out an occasional email with the latest tutorials on programming, web development, and statistics. Drop your email in the box below and I'll send new stuff straight into your inbox!

No spam. Unsubscribe anytime.