【问题标题】:Calling two different Procedures with Transaction in another Procedure在另一个过程中使用事务调用两个不同的过程
【发布时间】:2015-02-26 06:36:41
【问题描述】:

这是程序的流程

sp_test(in_var1, in_var2, in_var3)
begin
    if(a record exists) then
        call sp_test_update(in_var1, in_var2, in_var3)
    else
        call sp_test_insert(in_var1, in_var2, in_var3)
end

sp_test_insert(in_var1, in_var2, in_var3)
begin
    declare exit handler for sqlexception
    begin
        rollback
    end
    start transaction
        /*
            code block for insert
        */
    commit
end  

sp_test_update(in_var1, in_var2, in_var3)
begin
    declare exit handler for sqlexception
    begin
        rollback
    end
    start transaction
        /*
            code block for update
        */
    commit
end

已经尝试过创建一个单个过程,但是应用程序有一个不同的过程来处理插入和更新,从而导致存储数据出现问题。

请问这种做法在一个Procedure..

..一个糟糕的实施?还是练习?还是编码
..对数据库服务器的性能产生巨大影响?
..在被用户请求淹没时造成瓶颈

【问题讨论】:

    标签: mysql database stored-procedures transactions procedure


    【解决方案1】:

    虽然这会起作用,但它不是必需的。 MySQL 已经有 2 种方法来处理这个用例:

    替换http://dev.mysql.com/doc/refman/5.0/en/replace.html

    并且在重复密钥更新http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

    因此,请阅读它们,选择要实现的内容并使用它编写 1 个 proc。

    【讨论】:

    • 已经阅读并尝试了上述主题,获得了与预期相同的成功结果。谢谢小伙伴的努力!干杯
    • 好的,那是您的单一 proc 尝试和存储数据问题。在那种情况下,我也看不到任何其他 sp 调用将如何工作,因为这将是对 sp 的盲目调用。您必须先在客户端代码中进行测试,然后使用特定进程调用特定的 sp。你为什么不知道它是否是一个现有的实体?您使用的是什么框架/orm?
    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多