MySQL中的过程是什么?[转载]

klh5stk1  于 12个月前  发布在  Mysql
关注(0)|答案(1)|浏览(105)

此问题在此处已有答案

What's the differences between stored procedures, functions and routines?(5个答案)
Calling stored procedure with Out parameter using PDO(3个答案)
Create Stored Procedures with PDO in PHP(3个答案)
上个月关门了。
我在谷歌上搜索过,但没有找到任何我能理解的东西。
使用存储过程带来的性能提升是否显著?
我是否仍然希望将预处理语句与存储过程结合使用,或者它通常是一个或另一个?
我可以通过PHPMyAdmin创建存储过程并从那里管理它们吗?
对于像这样简单的东西,存储过程会是什么样子-

SELECT * FROM table a 
INNER JOIN otherTable b 
ON a.join_id=b.join_id 
WHERE someVar = :boundParam

字符串
PHP如何工作(PDO)来调用它并绑定它的参数?

ia2d9nvy

ia2d9nvy1#

A procedure

  • 可以有零个或多个带有BEGIN ... END statement的SQL语句。* 没有没有BEGIN ... END语句的语句会出错。
  • 可以只有一个语句,而没有BEGIN ... END语句,不会将$$更改为$$而不会出错。
  • 可以有多个参数,包括INOUTINOUT,也可以没有这些参数。
  • 可以从调用方获得零个或多个带有零个或多个ININOUT参数的值。
  • 可以使用OUTINOUT参数向调用者返回零个或多个值。
  • 可以有local variablesuser-defined variables。* 我的答案解释了局部变量和用户定义变量。
  • 可以有transaction
  • 不能有RETURN语句,否则会出现错误。
  • 默认情况下不是原子的,所以如果有错误,它不会自动回滚。
  • 在这个答案中,我解释了如何创建一个带有IN参数的过程,我的答案和我的答案分别解释了OUTINOUT参数,the doc详细解释了一个过程。

例如,创建test表,如下所示:

CREATE TABLE test (
  num int
);

字符串
然后,插入num2的行,如下所示:

INSERT INTO test (num) VALUES (2);


现在,您可以创建addition(IN value INT)过程,将value添加到num,如下所示。* IN参数IN value INT可以从调用者获取值,您也可以使用value INT而不使用IN,这也被识别为IN参数,基本上,你需要在创建过程时将默认的;更改为类似$$的东西,否则会出现错误,然后在创建过程后,您需要将$$更改回;,如下所示,我的答案解释了$$,并且在创建过程时必须选择数据库否则会出现错误:

DELIMITER $$

CREATE PROCEDURE addition(IN value INT)
BEGIN
UPDATE test SET num = num + value;
END$$

DELIMITER ;
DELIMITER $$

CREATE PROCEDURE addition(INOUT v1 INT, INOUT v2 INT)
BEGIN
SELECT v1+1, v2+1 into v1, v2;
END$$

DELIMITER ;

的字符串
然后,您可以使用CALL语句调用addition(3),然后将3添加到num,如下所示:

mysql> CALL addition(3);
...
mysql> SELECT num FROM test;
+------+
| num  |
+------+
|  5   |
+------+


或者,您可以设置the user-defined session variable,例如@v3,然后3添加到num,如下所示。* 用户自定义会话变量的初始值为NULL

mysql> SET @v = 3;
...
mysql> CALL addition(@v);
...
mysql> SELECT num FROM test;
+------+
| num  |
+------+
|  5   |
+------+


此外,您还可以使用用户定义的会话变量(例如@v)创建addition()过程,而不使用IN参数,如下所示:

DELIMITER $$

CREATE PROCEDURE addition()
BEGIN                    -- ↓↓ Here
UPDATE test SET num = num + @v;
END$$

DELIMITER ;


然后,您将@v3设置并调用addition(),然后3添加到num,如下所示:

mysql> SET @v = 3;
...
mysql> CALL addition();
...
mysql> SELECT num FROM test;
+------+
| num  |
+------+
|  5   |
+------+


并且,在下面的情况下,您可以创建addition(IN value INT)过程,而不会将$$更改为$$而不会出错:

CREATE PROCEDURE addition(IN value INT)
UPDATE test SET num = num + value;

相关问题