在mysql中编写存储过程的正确方法

时间:2014-10-14 11:33:16

标签: mysql stored-procedures mysql-5.6

我在mysql数据库中编写了一个存储过程,如下所示:

CREATE PROCEDURE sp_Test(
    IN Mode     VARCHAR(50),
    IN UserID   INT,
    ....
    ....  
)
BEGIN
    SET @sqlQuery = "";
    IF (Mode = 'Select') THEN
       //Select query
    ELSEIF (Mode = 'Update') THEN
       //update query
    ELSEIF (Mode = 'Delete') THEN
       //Delete query
    END
END

根据我的需要,我可以这样称呼它

CALL sp_Test("Select", 1, ...)
OR
CALL sp_Test("Update", 1, ...)
OR
CALL sp_Test("Delete", 1, ...)

性能还可以吗?或者我应该为每个模式编写单独的存储过程,如

用于SELECT

CREATE PROCEDURE sp_Test_Select(
    IN UserID   INT,
    ....
    ....  
)
BEGIN
    //Select query
END

for UPDATE

CREATE PROCEDURE sp_Test_Update(
    IN UserID   INT,
    ....
    ....  
)
BEGIN
    //Select query
END

2 个答案:

答案 0 :(得分:0)

在我看来,这些程序的性能没有显着差异(除非您每秒24x7每秒使用它们数百次)。

可读性存在差异。这是一个显着的差异。 test_DELETE(item)test("delete", item)更容易理解。请记住,您不仅要为机器编写代码,还要为将要处理项目的下一个人编写代码。使用你的第二种选择。

答案 1 :(得分:0)

除了性能限制(如果有的话);始终建议为单独的操作(select / insert / update / delete)定义单独的过程,因为

  
      
  1. 它增加了可重复性。

  2.   
  3. 可维护性。如果将来需要做任何改变,可以很好地保持单独的程序。

  4.   

考虑一下,为不同的操作传递参数。对于select,您很可能不需要将任何参数传递给该过程,但对于insertupdatedelete,您必须传递参数。在单个程序体内区分它们不会是一团糟吗?