MySQL-预处理

MySQL-预处理

起男 501 2022-04-20

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级别