MySQL - PREPARE 语句
MySQL PREPARE 语句
MySQL 中的预处理语句表示预编译语句。语句被编译并存储在预处理语句中,您以后可以多次执行该语句。我们向该语句传递占位符而不是值。
如果您想执行多个相同的查询(仅在值上有所不同),您可以使用预处理语句。您可以在客户端库和 SQL 脚本中执行这些语句。
SQL 预处理语句基于三个语句,即 -
- PREPARE
- EXECUTE
- DEALLOCATE PREPARE
上述三个语句中的 PREPARE 语句/命令用于预处理语句。准备好后,您需要使用 SET 语句设置占位符的值。
语法
以下是 PREPARE 语句的语法 -
PREPARE stmt_name FROM preparable_stmt
其中 stmt_name 是准备好的语句的名称,稍后您可以引用它。
示例
假设我们使用 CREATE 语句在数据库中创建了一个名为 Employee 的表,并在其中插入了三条记录,如下所示 -
CREATE TABLE Employee( Name VARCHAR(255), Salary INT, Location VARCHAR(255) );
以下语句将记录插入上述创建的表中 -
INSERT INTO Employee VALUES ('Amit', 6554, 'Hyderabad'), ('Sumith', 5981, 'Vishakhapatnam'), ('Sudha', 7887, 'Vijayawada');
如果您观察上述语句,除了值之外,所有插入语句都是相同的。您可以准备一个使用占位符代替值的语句,如下所示 -
PREPARE prepared_stmt FROM 'INSERT INTO EMPLOYE VALUES (?, ?, ?)'; Statement prepared
语句准备好后,您需要按如下方式设置占位符的值 -
SET @name = 'Raghu'; SET @sal = 9878; SET @loc = 'Delhi';
您可以使用 EXECUTE 语句执行上述准备好的语句 -
EXECUTE prepared_stmt USING @name, @sal, @loc;
验证
执行准备好的语句后,如果您验证员工表的内容,则可以观察到新插入的行 -
SELECT * FROM EMPLOYEE;
输出
以下是上述查询的输出 -
Name | Salary | Location |
---|---|---|
Amit | 6554 | Hyderabad |
Sumith | 5981 | Vishakhapatnam |
Sudha | 7887 | Vijayawada |
Raghu | 9878 | Delhi |
示例
以下是包含 SELECT 查询的预处理语句 -
--Preparing the statement PREPARE prepared_stmt FROM 'SELECT ? FROM EMPLOYE where Name = ?'; Statement prepared --Setting the values SET @col = 'Salary'; SET @name = 'Raghu'; --Executing the statement EXECUTE prepared_stmt USING @col, @name;
输出
上述查询产生以下输出 -
? |
---|
Salary |
示例
假设我们使用下面显示的 Create 语句创建了另一个名为 Student 的表 -
Create table Student( Name Varchar(35), age INT, Score INT );
现在,让我们尝试在 Student 表中插入一些记录 -
INSERT INTO student values ('Jeevan', 22, 8), ('Raghav', 26, 3), ('Khaleel', 21, 9), ('Deva', 30, 9);
您可以使用此语句动态选择要执行查询的表,如下所示 -
--Setting the table name dynamically SET @table = 'Student'; SET @statement = CONCAT('SELECT * FROM ', @table); --Preparing the statement PREPARE prepared_stmt FROM @statement; Statement prepared --Executing the statement EXECUTE prepared_stmt;
输出
以下是上述查询的输出 -
Name | age | Score |
---|---|---|
Jeevan | 22 | 8 |
Raghav | 26 | -3 |
Khaleel | 21 | -9 |
Deva | 30 | 9 |