MySQL-预处理
某一条sql语句可能会被返回调用执行,或者每次执行时只有个别值不同。如果每次都需要经过语法解析、语法优化、定制执行计划等,则效率明显不高
所谓预编译语句就是将此类sql语句中的值用占位符替代,可以视为将sql语句模板化或者说参数化,这类语句一般叫做PreparedStatements
优点
-
一次编译,多次运行,省去了解析优化的过程
-
防止sql注入
语法
# 定义
prepare stmt_name from preparable_stmt;
# 执行
execute stmt_name [using @var_name[,@var_name...]];
# 删除(释放)
{deallocate|drop} prepare stmt_name;
- stmt_name是preparable_stmt的接收者,唯一标识,不区分大小写
- preparable_stmt语句中的
?
是占位符,代表一个字符串,不需要将?
用引号包含起来 - 定义一个已经存在的stmt_name,原有的将被立即释放,类似于变量的重新赋值
- prepare stmt_name的作用域是session级别