预处理
参考博客1
参考博客2
SQL 分为两种。一种是:即时执行的 SQL,另一种是:预处理的 SQL
我们平常写的 SQL 都是即时执行的 SQL。比如:select * from user where id = 1;
预处理执行处理过程:
- 将 SQL 拆分为结构部分 和 数据部分
- 在执行 SQL 语句的时候,首先将结构部分,发送给 MySQL 服务器,让 MySQL 服务器进行预处理,数据部分用 ?占位
- 然后把数据部分发送给 MySQL 服务端,MySQL 服务端对 SQL 语句进行占位符替换
- MySQL 服务端执行完整的 SQL 语句并将结果返回给客户端。
首先 PrepareStatement 发送 结构部分 到服务器后会经历上述 1、2、3、4 过程
当 执行时再发送 数据部分 到服务器后会经历上述 5 过程
结构部分用于确定 SQL 的结构,数据部分为数据进行填充,不作为结构的一部分。从而避免了 SQL 注入攻击
预处理的优点
- 预处理语句减少了分析时间,提高了性能
- 绑定参数减少了服务器带宽,只需发送查询的参数,而不是整个语句
- 预处理语句防止 SQL 注入攻击。因为发送结构部分 和 数据部分使用不同的协议,保证了数据的合法性 ```sql prepare stmt1 from “select from user where id = ?”; prepare stmt2 from “select from user where username = ?”;
set @a=101; execute stmt1 using @a
set @b=”admin”; execute stmt2 using @b; ```
用户变量 & 系统变量
用户变量 @
系统变量 @@