大势趋007

每个人都是🏆
  新随笔  :: 管理

Prepared Statements(预处理语句)

Posted on 2025-08-27 17:19  大势趋007  阅读(48)  评论(0)    收藏  举报

15.5 Prepared Statements

https://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html


一、什么是 Prepared Statements(预处理语句)

  • MySQL 支持服务端预处理语句(prepared statement),利用高效的二进制协议处理参数化SQL,提升性能和安全性。
  • 预处理语句允许将SQL与数据分离,支持参数占位符(?),在实际执行前只需解析一次语句。
  • 主要优点:
    1. 执行效率高:多次执行类似SQL时只需解析一次,大幅减少了数据库负担(如大批量插入、更新、查询)。
    2. 防SQL注入:参数值无需手动转义危险字符,数据库驱动自动处理。

二、Prepared Statement 的三大SQL语句

  1. PREPARE

    • 准备SQL语句:PREPARE stmt_name FROM 'SQL语句'
    • SQL语句可包含参数占位符(?)
  2. EXECUTE

    • 执行已准备的语句:EXECUTE stmt_name [USING @var1, @var2, ...]
    • 可以动态传递参数值(变量)
  3. DEALLOCATE|DROP PREPARE

    • 释放已准备的语句:{DEALLOCATE | DROP} PREPARE stmt_name

三、实际示例(SQL语法)

-- 用字符串字面值创建
PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
SET @a = 3;
SET @b = 4;
EXECUTE stmt1 USING @a, @b;
-- 得到结果5
DEALLOCATE PREPARE stmt1;

-- 用变量创建
SET @sql = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
PREPARE stmt2 FROM @sql;
SET @a = 6;
SET @b = 8;
EXECUTE stmt2 USING @a, @b;
-- 得到结果10
DEALLOCATE PREPARE stmt2;