所谓预编译语句就是将此类 SQL 语句中的值用占位符替代,可以视为将 SQL 语句模板化或者说参数化,一般称这类语句叫Prepared Statements。
预编译语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止 SQL 注入。
注意:虽然可能是通过预处理 SQL 的方式一定程度的提高了效率,但是对于优化而言,最优的执行计划不是光靠 SQL 语句的模板化来实现的,往往还是需要通过具体值来预估出成本代价。
MySQL 官方将 prepare、execute、deallocate 统称为 PREPARE STATEMENT。
步骤大概分为四步:
1 set —— SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'
2 prepare —— PREPARE stmt2 FROM @s
3 execute —— EXECUTE stmt2
4 deallocate —— DEALLOCATE PREPARE stmt2
简单点理解:prepareStatement会形成参数化的查询,例如:1
select * from A where tablename.id = ?
传入参数'1select * from B'如果不经过prepareStatement,会形成下面语句:
1
select * from A where tablename.id = 1select * from B
这样等于两次执行,但如果经过预处理,会是这样:
1
select * from A where tablename.id = '1select * from B'
'1select * from B'只是一个参数,不会改变原来的语法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)