MySQL预处理 - Prepared Statements

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

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

另外,这是一个系列文章,最终我们将实用MySQL定时器和存储过程,实现定时自动创建分区功能,这是在此之前需要掌握的知识点,感兴趣的敬请关注。

目录

PREPARE 语句

EXECUTE 语句

DEALLOCATE PREPARE 语句

示例


PREPARE 语句

语法:

PREPARE stmt_name FROM preparable_stmt

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

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

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

文本必须代表单个语句,而不是多个语句。

语句中,字符可用作参数标记,已指示稍后在执行查询时将数据绑定到查询的位置。

?字符不应包含在引号内,参数标记只能用于出现数据值的地方,不能用于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;

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

完整过程如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值