0
点赞
收藏
分享

微信扫一扫

MySQL预处理 - Prepared Statements

ITWYY 2022-03-25 阅读 118
mysql

最近在使用存储过程定时创建分区的时候,使用到了预处理相关语句,在此记录一下MySQL的预处理语句使用,方便自己和大家查阅,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

MySQL预处理通常使用 PREPARE、EXECUTE 和 DEALLOCATE PREPARE 三个语句来进行处理。

PREPARE 语句

语法:

PREPARE stmt_name FROM preparable_stmt

prepare:该prepare语句准备一条SQL语句,并指定一个名称 stmt_name,以便后边进行引用。

stmt_name:语句名称不区分大小写。

preparable_stmt:字符串或包含SQL语句本文的用户变量。

EXECUTE 语句

语法:

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

使用 prepare 定义好预处理语句后,使用 execute 来执行。

如果准备好的语句包含任何参数标记,则必须提供一个 USING 子句,该子句列出包含要绑定到参数的值的用户变量。参数值只能由用户变量提供,并且 USING 子句必须命名与语句中参数标记的数量一样多的变量,并且按 using 后取值的顺序为 ? 赋值。

DEALLOCATE PREPARE 语句

语法:

{DEALLOCATE | DROP} PREPARE stmt_name

释放生成的预处理语句。如果不释放生成的预处理语句可以一直执行,释放后,再次执行就会报错。

示例

使用预处理语句向 tbl_msg_send 表中插入一条数据,执行如下语句:

insert into tbl_msg_send(msg_id,acc_id) values('12345',47);

定义prepare语句:

prepare stmt1 from 'insert into tbl_msg_send(msg_id,acc_id) values(?,?)';

如上这个prepare语句,有两个 字符作参数标记,在执行execute之前需要给这两个参数赋值,?字符不应包含在引号内,即使 msg_id 在数据库中为 varchar 类型 ,赋值时也不需要使用引号,直接赋值即可。

参数赋值:

@a=12345;
@b=47;

使用execute执行:

execute stmt1 using @a,@b;
execute stmt1 using @b,@a;

按照 using 后面取值的顺序为 预处理语句stmt中的 ? 赋值,我分别使用 @a,@b 和 @b,@a 执行两次,执行后查看数据库结果如下:

释放预处理语句:

deallocate prepare stmt1;

如果不释放生成的预处理语句可以一直执行,释放后,再次执行就会报错。

完整过程如下:

 

举报

相关推荐

0 条评论