MySQL - PREPARE Statement

A prepared statement in MySQL represents a precompiled statement. A statement is compiled and stored in a prepared statement and you can later execute this multiple times. Instead of values we pass place holders to this statement.
If you want to execute several identical queries (that differ by values only). You can use prepared statements. You can execute these statements in client libraries as well as in SQL scripts.
A SQL prepared statement is based on three statements namely −
PREPARE
EXECUTE
DEALLOCATE PREPARE
The DEALLOCATE PREPARE is used to de-allocate a PREPARED statement.
Following is the syntax of the EXECUTE statement −
DEALLOCATE PREPARE stmt_name

Where stmt_name is the name of the prepared statement to be de-allocated.
Suppose we have created a table named Employee in the database using the CREATE statement and inserted three records in it as shown below −
mysql> CREATE TABLE Employee(Name VARCHAR(255), Salary INT, Location VARCHAR(255));
You can prepare an INSERT statement with place holders instead of values as −
mysql> PREPARE prepared_stmt FROM 'INSERT INTO EMPLOYE VALUES (?, ?, ?)';
Query OK, 0 rows affected (0.02 sec)
Statement prepared
Now execute the above created prepared statement −
mysql> EXECUTE prepared_stmt USING @name, @sal, @loc;
Query OK, 1 row affected (0.19 sec)
Following query de-allocates the above created prepared statement.
mysql> DEALLOCATE PREPARE prepared_stmt;
Query OK, 0 rows affected (0.00 sec)
After de-allocating the prepared statement if you try to execute it again an error will be generated −
mysql> EXECUTE prepared_stmt USING @name, @sal, @loc;
ERROR 1243 (HY000): Unknown prepared statement handler (prepared_stmt) given to EXECUTE
We can also delete a prepared statement using this statement. Assume we have created another prepared statement as shown below −
--Preparing the statement
mysql> PREPARE prepared_stmt FROM 'SELECT * FROM EMPLOYE';
Query OK, 0 rows affected (0.00 sec)
Statement prepared

--Executing the statement
mysql> EXECUTE prepared_stmt;
+--------+--------+----------------+
| Name   | Salary | Location       |
+--------+--------+----------------+
| Amit   | 6554   | Hyderabad      |
| Sumith | 5981   | Vishakhapatnam |
| Sudha  | 7887   | Vijayawada     |
| Raghu  | 9878   | Delhi          |
+--------+--------+----------------+
4 rows in set (0.00 sec)
Following statement drops the above created prepared statement −
mysql> DROP PREPARE prepared_stmt;
Query OK, 0 rows affected (0.00 sec)
Assume we have created another table and populated it using the following queries −
mysql> Create table Student(Name Varchar(35), age INT, Score INT);
Query OK, 0 rows affected (1.28 sec)
mysql> INSERT INTO student values ('Jeevan', 22, 8);
mysql> INSERT INTO student values ('Raghav', 26, –3);
mysql> INSERT INTO student values ('Khaleel', 21, –9);
mysql> INSERT INTO student values ('Deva', 30, 9);
Assume we have created another table and populated it using the following queries −
mysql> Create table Student(Name Varchar(35), age INT, Score INT);
Query OK, 0 rows affected (1.28 sec)
mysql> INSERT INTO student values ('Jeevan', 22, 8);
mysql> INSERT INTO student values ('Raghav', 26, –3);
mysql> INSERT INTO student values ('Khaleel', 21, –9);
mysql> INSERT INTO student values ('Deva', 30, 9);
You can choose the table to execute a query dynamically using this statement as shown below −
--Setting the table name dynamically
mysql> SET @table = 'Student';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @statement = CONCAT('SELECT * FROM ', @table);
Query OK, 0 rows affected (0.08 sec)

--Preparing the statement
mysql> PREPARE prepared_stmt FROM @statement;
Query OK, 0 rows affected (0.16 sec)
Statement prepared

--Executing the statement
mysql> EXECUTE prepared_stmt;
+---------+------+-------+
| Name    | age  | Score |
+---------+------+-------+
| Jeevan  | 22   | 8     |
| Raghav  | 26   | –3    |
| Khaleel | 21   | –9    |
| Deva    | 30   | 9     |
+---------+------+-------+
4 rows in set (0.10 sec)

--De-allocating the statement
mysql> DEALLOCATE PREPARE prepared_stmt;
Query OK, 0 rows affected (0.00 sec)

    31 Lectures 
     6 hours 

 Eduonix Learning Solutions

    84 Lectures 
     5.5 hours 

 Frahaan Hussain

    6 Lectures 
     3.5 hours 

 DATAhill Solutions Srinivas Reddy

    60 Lectures 
     10 hours 

 Vijay Kumar Parvatha Reddy

    10 Lectures 
     1 hours 

 Harshit Srivastava

    25 Lectures 
     4 hours 

 Trevoir Williams
 Print
 Add Notes
 Bookmark this page