先来看下sql的执行流程
上面sql的执行流程可以简单看作:
- 语法和语义解析
- 优化sql,制定执行计划
- 执行并返回结果
预编译语句
很多时候一条sql语句可能会反复执行,或者每次执行的时候只有某些值不一样。比如query的where条件不一样,insert的value不一样。如果每次都经过上述1,2步,就显得有些浪费。
预编译语句就是将这些语句中的值用占位符替代,可以视为将sql语句模版化或者参数化。
预编译语句的优势:
- 一次编译多次执行,提高效率
- 防止sql注入
MySQL中的预编译语句作用域是session级的
使用方式
编译:
prepare insert_tpl from 'insert into demo values (?,?);
执行:
set @user_id=1, @age=20;
#Query OK, 0 rows affected (0.00 sec)
execute insert_tpl using @user_id,@age
#Query OK, 1 row affected (0.01 sec)
#Records: 1 Duplicates: 0 Warnings: 0
释放:
deallocate prepare insert_tpl;
#Query OK, 0 rows affected (0.00 sec)