预处理

参考博客1
参考博客2
SQL 分为两种。一种是:即时执行的 SQL,另一种是:预处理的 SQL
我们平常写的 SQL 都是即时执行的 SQL。比如:select * from user where id = 1;

预处理执行处理过程

  • 将 SQL 拆分为结构部分 和 数据部分
  • 在执行 SQL 语句的时候,首先将结构部分,发送给 MySQL 服务器,让 MySQL 服务器进行预处理,数据部分用 ?占位
  • 然后把数据部分发送给 MySQL 服务端,MySQL 服务端对 SQL 语句进行占位符替换
  • MySQL 服务端执行完整的 SQL 语句并将结果返回给客户端。

2006916-20210122225722246-474881653.png首先 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; ```

用户变量 & 系统变量

用户变量 @
系统变量 @@