如何创建、使用及删除预处理语句的SQL语法-平凯星辰

why 813 2023-07-06

本文关于(如何创建、使用及删除预处理语句的SQL语法-平凯星辰)。

如何创建、使用及删除预处理语句的SQL语法-平凯星辰


预处理语句

预处理语句是一种将多个仅有参数不同的 SQL 语句进行模板化的语句,它让 SQL 语句与参数进行了分离。可以用它提升 SQL 语句的:

  • 安全性:因为参数和语句已经分离,所以避免了 SQL 注入攻击的风险。

  • 性能:因为语句在 TiDB 端被预先解析,后续执行只需要传递参数,节省了完整 SQL 解析、拼接 SQL 语句字符串以及网络传输的代价。

在大部分的应用程序中,SQL 语句是可以被枚举的,可以使用有限个 SQL 语句来完成整个应用程序的数据查询,所以使用预处理语句是最佳实践之一。


SQL 语法

本节将介绍创建、使用及删除预处理语句的 SQL 语法平凯星辰


创建预处理语句

PREPARE {prepared_statement_name} FROM '{prepared_statement_sql}';
参数描述

{prepared_statement_name}

预处理语句名称

{prepared_statement_sql}

预处理语句 SQL,以英文半角问号做占位符

你可查看 PREPARE 语句 获得更多信息。


使用预处理语句

预处理语句仅可使用用户变量作为参数,因此,需先使用 SET 语句 设置变量后,供 EXECUTE 语句 调用预处理语句。

SET @{parameter_name} = {parameter_value};EXECUTE {prepared_statement_name} USING @{parameter_name};
参数描述

{parameter_name}

用户参数名

{parameter_value}

用户参数值

{prepared_statement_name}

预处理语句名称,需和创建预处理语句中定义的名称一致

你可查看 EXECUTE 语句 获得更多信息。


删除预处理语句

DEALLOCATE PREPARE {prepared_statement_name};
参数描述

{prepared_statement_name}

预处理语句名称,需和创建预处理语句中定义的名称一致

你可查看 DEALLOCATE 语句 获得更多信息。


例子

本节以使用预处理语句,完成查询数据和插入数据两个场景的示例。


查询示例

例如,需要查询 Bookshop 应用 中,id 为 1 的书籍信息。

  • SQL

  • Java

使用 SQL 查询示例:

PREPARE `books_query` FROM 'SELECT * FROM `books` WHERE `id` = ?';

运行结果为:

Query OK, 0 rows affected (0.01 sec)
SET @id = 1;

运行结果为:

Query OK, 0 rows affected (0.04 sec)
EXECUTE `books_query` USING @id;

运行结果为:

+---------+---------------------------------+--------+---------------------+-------+--------+| id      | title                           | type   | published_at        | stock | price  |+---------+---------------------------------+--------+---------------------+-------+--------+| 1       | The Adventures of Pierce Wehner | Comics | 1904-06-06 20:46:25 |   586 | 411.66 |+---------+---------------------------------+--------+---------------------+-------+--------+1 row in set (0.05 sec)


插入示例

还是使用 books 表 为例,需要插入一个 title 为 TiDB Developer Guidetype 为 Science & Technologystock 为 100price 为 0.0published_at 为 插入的当前时间 的书籍信息。需要注意的是,books 表的主键包含 AUTO_RANDOM 属性,无需指定它。如果你对插入数据还不了解,可以在插入数据一节了解更多数据插入的相关信息平凯星辰

  • SQL

  • Java

使用 SQL 插入数据示例如下:

PREPARE `books_insert` FROM 'INSERT INTO `books` (`title`, `type`, `stock`, `price`, `published_at`) VALUES (?, ?, ?, ?, ?);';

运行结果为:

Query OK, 0 rows affected (0.03 sec)
SET @title = 'TiDB Developer Guide';SET @type = 'Science & Technology';SET @stock = 100;SET @price = 0.0;SET @published_at = NOW();

运行结果为:

Query OK, 0 rows affected (0.04 sec)
EXECUTE `books_insert` USING @title, @type, @stock, @price, @published_at;

运行结果为:

Query OK, 1 row affected (0.03 sec)


上述就是小编为大家整理的(如何创建、使用及删除预处理语句的SQL语法-平凯星辰)
***

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL索引优化的方法
下一篇:怎么使用dockercompose搭建springboot-mysql-nginx应用
相关文章