我用谷歌搜索过,但没有找到任何我能理解的东西。
使用存储过程的性能提升是否显着?
我是否仍想将准备好的语句与存储过程结合使用,或者通常是其中之一?
我可以通过 PHPMyAdmin 创建存储过程并从那里管理它们吗?
对于像这样简单的事情,存储过程会是什么样子-
SELECT * FROM table a
INNER JOIN otherTable b
ON a.join_id=b.join_id
WHERE someVar = :boundParam
PHP 如何工作(PDO)来调用它并绑定它的参数?
将此视为对 MySQL 中存储过程的温和介绍:http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx
您确实可以在 phpMyAdmin 中创建/管理存储过程。
我创建了一个过程,但是调用该过程时我可以传递什么参数来获取输出
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
过程是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 |
+------+