MySQL 中的过程是什么? [已关闭]

问题描述 投票:0回答:3

我用谷歌搜索过,但没有找到任何我能理解的东西。

使用存储过程的性能提升是否显着?

我是否仍想将准备好的语句与存储过程结合使用,或者通常是其中之一?

我可以通过 PHPMyAdmin 创建存储过程并从那里管理它们吗?

对于像这样简单的事情,存储过程会是什么样子-

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

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

mysql database stored-procedures procedure
3个回答
16
投票

将此视为对 MySQL 中存储过程的温和介绍:http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx

您确实可以在 phpMyAdmin 中创建/管理存储过程。


0
投票

我创建了一个过程,但是调用该过程时我可以传递什么参数来获取输出

CREATE DEFINER=`root`@`localhost` PROCEDURE `A`(

In user_id bigint,
Out address varchar(250)

)
BEGIN

select Address into address
from UserDetail_table
where User_ID = user_id; 

END

0
投票

过程是MySQL中的特殊函数。

例如,您创建

test
表,如下所示:

CREATE TABLE test (
  num int
);

然后,插入

num
1
的行,如下所示:

INSERT INTO test (num) VALUES (1);

现在,您可以创建

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 ;

然后,您可以使用

CALL
语句来调用 addition(3),然后
3
将被添加到
num
中,如下所示:

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

并且,

addition()
过程可以具有像
OUT
一样的
result
参数,它可以通过存储
addition
值,使用用户定义的会话变量将值从
num
过程返回给调用者,如下所示。 *在程序中,
OUT
参数的初始值始终为
NULL

DELIMITER $$

CREATE PROCEDURE addition(IN value INT, OUT result INT)
BEGIN
UPDATE test SET num = num + value;
SELECT num INTO result FROM test;
END$$

DELIMITER ;

然后,您可以使用

addition(3, @r)
语句调用
CALL
,然后将
3
添加到
num
中,并且
@r
具有
num
4
,如下所示:

mysql> CALL addition(3, @r);
...
mysql> SELECT * FROM test;
+------+
| num  |
+------+
|  4   |
+------+
...
mysql> SELECT @r;
+------+
| @r   |
+------+
|    4 |
+------+

并且,

addition()
过程可以具有
INOUT
参数,如
result
,它通过存储
addition
值,从
num
过程返回一个值,并使用用户定义的会话变量,如下所示。 *您可以由调用者设置
INOUT
参数的初始值:

DELIMITER $$

CREATE PROCEDURE addition(INOUT result INT)
BEGIN
UPDATE test SET num = num + result;
SELECT num INTO result FROM test;
END$$

DELIMITER ;

然后,您可以将

3
设置为
@r
,然后使用
addition(@r)
语句调用
CALL
,然后将
3
添加到
num
,并且
@r
具有
num
4
,如下所示。 *用户自定义会话变量的初始值为
NULL
:

mysql> SET @r = 3;
...
mysql> CALL addition(@r);
...
mysql> SELECT * FROM test;
+------+
| num  |
+------+
|  4   |
+------+
...
mysql> SELECT @r;
+------+
| @r   |
+------+
|    4 |
+------+
© www.soinside.com 2019 - 2024. All rights reserved.