15.5 Prepared Statements
https://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html
一、什么是 Prepared Statements(预处理语句)
- MySQL 支持服务端预处理语句(prepared statement),利用高效的二进制协议处理参数化SQL,提升性能和安全性。
- 预处理语句允许将SQL与数据分离,支持参数占位符(?),在实际执行前只需解析一次语句。
- 主要优点:
- 执行效率高:多次执行类似SQL时只需解析一次,大幅减少了数据库负担(如大批量插入、更新、查询)。
- 防SQL注入:参数值无需手动转义危险字符,数据库驱动自动处理。
二、Prepared Statement 的三大SQL语句
-
PREPARE
- 准备SQL语句:
PREPARE stmt_name FROM 'SQL语句' - SQL语句可包含参数占位符(?)
- 准备SQL语句:
-
EXECUTE
- 执行已准备的语句:
EXECUTE stmt_name [USING @var1, @var2, ...] - 可以动态传递参数值(变量)
- 执行已准备的语句:
-
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;
浙公网安备 33010602011771号