Tutorial on using prepare, execute and deallocate statements in MySQL

Tutorial on using prepare, execute and deallocate statements in MySQL

Preface

MySQL officially refers to prepare, execute, and deallocate as PREPARE STATEMENT. I am used to calling it [prepared statement]. Its usage is very simple. Let's take a look at the detailed introduction without further ado.

Sample Code

PREPARE stmt_name FROM preparable_stmt

EXECUTE stmt_name
 [USING @var_name [, @var_name] ...] -

{DEALLOCATE | DROP} PREPARE stmt_name

For example:

mysql> PREPARE pr1 FROM 'SELECT ?+?';
Query OK, 0 rows affected (0.01 sec)
Statement prepared

mysql> SET @a=1, @b=10 ;
Query OK, 0 rows affected (0.00 sec)

mysql> EXECUTE pr1 USING @a, @b;
+------+
| ?+? |
+------+
| 11 |
+------+
1 row in set (0.00 sec)

mysql> EXECUTE pr1 USING 1, 2; -- Only user variables can be passed.
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the 
right syntax to use near '1, 2' at line 1

mysql> DEALLOCATE PREPARE pr1;
Query OK, 0 rows affected (0.00 sec)

Using PAREPARE STATEMENT can reduce the syntax analysis of each SQL execution. For example, when executing SELECT and DELETE with WHERE conditions, or UPDATE, or INSERT, you only need to modify the variable value each time.

SQL injection can also be prevented, and parameter values ​​can contain escape characters and delimiters.

Applicable in applications or SQL scripts.

More usage:

Similarly, PREPARE ... FROM can directly connect to user variables:

mysql> CREATE TABLE a (a int);
Query OK, 0 rows affected (0.26 sec)

mysql> INSERT INTO a SELECT 1;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> INSERT INTO a SELECT 2;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> INSERT INTO a SELECT 3;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> SET @select_test = CONCAT('SELECT * FROM ', @table_name);
Query OK, 0 rows affected (0.00 sec)

mysql> SET @table_name = 'a';
Query OK, 0 rows affected (0.00 sec)

mysql> PREPARE pr2 FROM @select_test;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> EXECUTE pr2;
+------+
| a |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)

mysql> DROP PREPARE pr2; -- DROP can replace DEALLOCATE here
Query OK, 0 rows affected (0.00 sec)

Every time you complete an EXECUTE statement, develop a good habit of executing the DEALLOCATE PREPARE ... statement to release all database resources (such as cursors) used in the execution.

Moreover, if there are too many prepared statements in a session, the upper limit of max_prepared_stmt_count may be reached.

Prepared statements can only be used in the session of the creator and cannot be used in other sessions.

Furthermore, when you exit the session in any way (normal or abnormal), the previously defined prepared statements will no longer exist.

If used in a stored procedure, if it is not DEALLOCATEd in the procedure, the prepared statement will still be valid after the stored procedure ends.

Summarize

The above is the full content of this article. I hope that the content of this article can bring some help to your study or work. If you have any questions, you can leave a message to communicate. Thank you for your support of 123WORDPRESS.COM.

You may also be interested in:
  • Specific use of Mysql prepare preprocessing
  • MySQL prepare usage and bug analysis process

<<:  nginx proxy_cache batch cache clearing script introduction

>>:  Detailed explanation of routing configuration in Linux system with multiple network cards

Recommend

Native JS to implement breathing carousel

Today I will share with you a breathing carousel ...

The role of MySQL 8's new feature window functions

New features in MySQL 8.0 include: Full out-of-th...

Gearman + MySQL to achieve persistence operation example

This article uses the gearman+mysql method to imp...

JavaScript lazy loading detailed explanation

Table of contents Lazy Loading CSS styles: HTML p...

The whole process of installing and configuring Harbor1.7 on CentOS7.5

1. Download the required packages wget -P /usr/lo...

Vue implements a simple magnifying glass effect

This article example shares the specific code of ...

Tutorial on using the frameset tag in HTML

Frameset pages are somewhat different from ordina...

MySQL Query Cache and Buffer Pool

1. Caches - Query Cache The following figure is p...

Sample code for testing technology application based on Docker+Selenium Grid

Introduction to Selenium Grid Although some new f...

The current better way to make select list all options when selected/focused

During development, I encountered such a requireme...

Pull-down refresh and pull-up loading components based on Vue encapsulation

Based on Vue and native javascript encapsulation,...

MySQL SQL statement to find duplicate data based on one or more fields

SQL finds all duplicate records in a table 1. The...

Detailed explanation of the steps to build a Vue project with Vue-cli

First you need to install Vue-cli: npm install -g...

Tips for importing csv, excel or sql files into MySQL

1. Import csv file Use the following command: 1.m...