mysql - mysql存储过程的正确写法

标签 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, ...)

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

对于选择

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

更新

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

最佳答案

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

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

关于mysql - mysql存储过程的正确写法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26359814/

相关文章:

mysql - 是否有可能获得 InnoDB 内部行 ID?

mysql - 为什么我不能永久更改 sql_mode?

mysql - 统计MySQL中 "latest"连续计数

MySQL Query解析两张表,两个字段

sql-server - 如何针对多个数据库表验证变量

mysql - 将变量从 PHP 脚本传递到过程 Mysql

mysql - 使用云 SQL 从 MySQL 5.5 迁移到 GAE : Microtime support?

php - 使用 SQL 语句将表行 ID 的值分配给另一个 ID

mysql - 如何在日期时间数据类型中插入正确的格式?

TSQL 如何在选择查询中执行存储过程?