bcm*_*cfc 19 mysql stored-procedures
我用谷歌搜索了,但没有提出任何我可以解决的问题.
使用存储过程的性能提升是否显着?
我是否仍然希望将预准备语句与存储过程一起使用,或者它通常是一个还是另一个?
我可以通过PHPMyAdmin创建存储过程并从那里管理它们吗?
对于像这样简单的事情,存储过程会是什么样子 -
SELECT * FROM table a
INNER JOIN otherTable b
ON a.join_id=b.join_id
WHERE someVar = :boundParam
Run Code Online (Sandbox Code Playgroud)
以及PHP如何工作(PDO)来调用它并绑定其参数?
bco*_*sca 17
考虑这是对MySQL中存储过程的温和介绍:http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx
您确定可以在phpMyAdmin中创建/管理存储过程.
小智 0
可以有零个或多个带有BEGIN ... END 语句的SQL 语句。*没有语句的语句BEGIN ... END不会出错。
只能有单个语句,而没有BEGIN ... END语句不将分隔符更改为$$没有错误。
可以有多个参数IN,带 、OUT和INOUT不带它们。
可以从调用者处获取零个或多个带有零个或多个参数IN的值。INOUT
OUT可以使用和参数向调用者返回零个或多个值INOUT。
可以进行交易。
\n默认情况下不是原子的,因此如果出现错误,不会自动回滚。*我的回答详细解释了这一点。
\n*在这个答案中,我解释了如何使用IN参数创建一个过程,我的答案和我的答案分别解释OUT和参数,文档详细解释了一个过程。INOUT
例如,您创建test如下所示的表:
CREATE TABLE test (\n num int\n);\nRun Code Online (Sandbox Code Playgroud)\n然后,插入num如下2所示的行:
INSERT INTO test (num) VALUES (2);\nRun Code Online (Sandbox Code Playgroud)\n现在,您可以创建添加到如下所示的addition(IN value INT)过程。*参数可以从调用者那里获取值,你也可以使用,没有它也被识别为参数,基本上,你需要将默认分隔符更改为创建过程时的样子,否则会出错,然后在创建过程之后,您需要将分隔符更改回如下所示,我的答案解释了分隔符,并且您必须在创建过程时选择数据库,否则会出现错误:valuenumININ value INTvalue INTININ;$$$$;
DELIMITER $$\n\nCREATE PROCEDURE addition(IN value INT)\nBEGIN\nUPDATE test SET num = num + value;\nEND$$\n\nDELIMITER ;\nRun Code Online (Sandbox Code Playgroud)\nDELIMITER $$\n\nCREATE PROCEDURE addition(INOUT v1 INT, INOUT v2 INT)\nBEGIN\nSELECT v1+1, v2+1 into v1, v2;\nEND$$\n\nDELIMITER ;\nRun Code Online (Sandbox Code Playgroud)\n然后,可以用addition(3)CALL语句调用,然后3添加num如下所示:
mysql> CALL addition(3);\n...\nmysql> SELECT num FROM test;\n+------+\n| num |\n+------+\n| 5 |\n+------+\nRun Code Online (Sandbox Code Playgroud)\n或者,您可以设置用户定义的会话变量,例如@v使用3,然后3添加到,num如下所示。*用户定义的会话变量的初始值为NULL:
mysql> SET @v = 3;\n...\nmysql> CALL addition(@v);\n...\nmysql> SELECT num FROM test;\n+------+\n| num |\n+------+\n| 5 |\n+------+\nRun Code Online (Sandbox Code Playgroud)\n此外,您可以addition()使用用户定义的会话变量(例如@v,不带IN参数)创建过程,如下所示:
DELIMITER $$\n\nCREATE PROCEDURE addition()\nBEGIN -- \xe2\x86\x93\xe2\x86\x93 Here\nUPDATE test SET num = num + @v;\nEND$$\n\nDELIMITER ;\nRun Code Online (Sandbox Code Playgroud)\n然后,您设置@v并3调用addition(), then3添加到num如下所示:
mysql> SET @v = 3;\n...\nmysql> CALL addition();\n...\nmysql> SELECT num FROM test;\n+------+\n| num |\n+------+\n| 5 |\n+------+\nRun Code Online (Sandbox Code Playgroud)\n并且,在下面的情况下,您可以创建addition(IN value INT)不将分隔符更改为而$$不会出现错误的过程:
CREATE PROCEDURE addition(IN value INT)\nUPDATE test SET num = num + value;\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
26949 次 |
| 最近记录: |