哪个更好使用Cursor或多次调用存储过程

时间:2013-06-02 11:30:01

标签: mysql stored-procedures cursor

假设您要在表中插入多个值。在每次插入之前和之后必须执行一些依赖操作,因此所有这些过程必须在单个事务中完成。现在假设每个插入的行依赖操作都依赖于先前提交的插入。现在哪种情况更好:

  1. 迭代在程序级插入值并每次调用存储过程(MySQL服务器和应用程序安装在不同的机器中)
  2. 使用带有内部事务和提交的游标
  3. 使用while循环
  4. 其他场景

2 个答案:

答案 0 :(得分:0)

就个人而言,我会考虑建立表格的single insert query

INSERT INTO tbl_name 
(a,b,c) 
VALUES
(1,2,3)
,(4,5,6)
,(7,8,9);

如果你不能将一组数据传递给存储过程中的单个插入,那么在代码中构建它。对于不同的语言,在SO上似乎有很多例子(编辑:包含在SQL中)

编辑:回答评论。 不,我明白了。我所暗示的是你首先在代码中构建它(使用任何先前提交的数据和/或要插入的新数据)。在我看来,你应该避免多次调用SQL DB,除非它成为一个必需的优化,因为单个事务将锁定数据(当然,取决于你选择的隔离级别)。该示例只是为了显示最终的sql将归结为什么。那有意义吗?

答案 1 :(得分:0)

他们都不会很出色。 SQL并不是真正设计用于那种处理。触发器是可能的,但最终可能比上述任何解决方案都要麻烦。除非循环非常简单,例如一个整数,我可能会自己使用光标。

可能会有一些方法,但这取决于你想要做的确切处理,可能还有我们自己的偏好