MySQL - DEALLOCATE 语句
MySQL 中的预处理语句表示预编译语句。语句经过编译并存储在预处理语句中,您以后可以多次执行该语句。我们向该语句传递的是占位符,而不是值。
如果您想执行多个相同的查询(仅值不同),可以使用预处理语句。您可以在客户端库以及 SQL 脚本中执行这些语句。
SQL 预处理语句基于三个语句,即 -
- PREPARE
- EXECUTE
- DEALLOCATE PREPARE
MySQL DEALLOCATE 语句
DEALLOCATE PREPARE 用于取消分配 PREPARED 语句。
语法
以下是 EXECUTE 语句的语法 -
DEALLOCATE PREPARE stmt_name
其中 stmt_name 是要执行的预处理语句的名称取消分配。
示例
假设我们使用 CREATE 语句在数据库中创建了一个名为 Employee 的表,并在其中插入了三条记录,如下所示 -
CREATE TABLE Employee( Name VARCHAR(255), Salary INT, Location VARCHAR(255) );
您可以使用占位符代替值来准备 INSERT 语句,如下所示:-
PREPARE prepared_stmt FROM 'INSERT INTO EMPLOYE VALUES (?, ?, ?)'; Statement prepared
现在执行上面创建的准备好的语句 -
EXECUTE prepared_stmt USING @name, @sal, @loc;
以下查询将取消分配上面创建的准备好的语句。
DEALLOCATE PREPARE prepared_stmt;
验证
在释放预处理语句的内存后,如果尝试再次执行该语句,将生成错误 -
ERROR 1243 (HY000): Unknown prepared statement handler (prepared_stmt) given to EXECUTE
示例
我们也可以使用此语句删除一个预处理语句。假设我们创建了另一个预处理语句,如下所示 -
--Preparing the statement PREPARE prepared_stmt FROM 'SELECT * FROM EMPLOYE'; Statement prepared --Executing the statement EXECUTE prepared_stmt;
输出
以下是上述程序的输出 -
Name | Salary | Location |
---|---|---|
Amit | 6554 | Hyderabad |
Sumith | 5981 | Vishakhapatnam |
Sudha | 7887 | Vijayawada |
Raghu | 9878 | Delhi |
以下语句将删除上面创建的预处理语句 -
DROP PREPARE prepared_stmt;
示例
假设我们创建了另一个表并使用以下查询填充了它 -
Create table Student( Name Varchar(35), age INT, Score INT );
现在,让我们尝试在 student 表中插入一些记录 -
INSERT INTO student values ('Jeevan', 22, 8), ('Raghav', 26, 3), ('Khaleel', 21, 9), ('Deva', 30, 9);
您可以选择表来使用此语句动态执行查询,如下所示 -
--Setting the table name dynamically SET @table = 'Student'; SET @statement = CONCAT('SELECT * FROM ', @table); --Preparing the statement PREPARE prepared_stmt FROM @statement; Statement prepared --Executing the statement EXECUTE prepared_stmt;
输出
上述 mysql 查询将生成以下输出 -
Name | age | Score |
---|---|---|
22 | 8 | |
Raghav | 26 | -3 |
Khaleel | 21 | -9 |
Deva | 30 | 9 |
--De-allocating the statement DEALLOCATE PREPARE prepared_stmt;