MySQL Prepared准备语句的用法(附带实例)
MySQL 9.0 支持准备语句(Prepared Statements),这是一种预编译的 SQL 语句,可以包含占位符,这些占位符在执行时会被实际的值替换。
准备语句的优势如下:
下面通过案例来理解准备语句的使用方法。
1) 使用 PREPARE 语句准备一个 SQL 语句模板,该模板可以包含一个或多个占位符(?):
2) 使用 SET 语句为占位符设置具体的值:
3) 使用 EXECUTE 语句执行准备好的 SQL 语句,并用之前设置的参数替换占位符:
4) 执行完成后,使用 DEALLOCATE PREPARE 语句释放准备好的语句:
准备语句还可以用于动态选择需要查询的表,它将表名作为用户变量,并在执行时替换到SQL语句中。例如,首先设置用户变量 @table 的值为表名,然后构造一个包含该表名的 SQL 查询字符串,最后使用 PREPARE 和 EXECUTE 语句执行该查询。这种灵活性使得准备语句在处理动态 SQL 场景时非常有用。
准备语句的优势如下:
- 准备语句可以提高性能,因为 SQL 解析和编译只发生一次,然后可以被多次执行,每次都可以使用不同的参数;
- 准备语句能增强应用程序的安全性,因为它们有助于防止 SQL 注入攻击。
下面通过案例来理解准备语句的使用方法。
1) 使用 PREPARE 语句准备一个 SQL 语句模板,该模板可以包含一个或多个占位符(?):
mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; mysql> PREPARE stmt1 FROM @s;
2) 使用 SET 语句为占位符设置具体的值:
mysql> SET @a = 6; mysql> SET @b = 8;
3) 使用 EXECUTE 语句执行准备好的 SQL 语句,并用之前设置的参数替换占位符:
mysql> EXECUTE stmt1 USING @a, @b; +------------+ | hypotenuse | +------------+ | 10 | +------------+
4) 执行完成后,使用 DEALLOCATE PREPARE 语句释放准备好的语句:
mysql> DEALLOCATE PREPARE stmt1;
准备语句还可以用于动态选择需要查询的表,它将表名作为用户变量,并在执行时替换到SQL语句中。例如,首先设置用户变量 @table 的值为表名,然后构造一个包含该表名的 SQL 查询字符串,最后使用 PREPARE 和 EXECUTE 语句执行该查询。这种灵活性使得准备语句在处理动态 SQL 场景时非常有用。