首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行流程、事务和MySQL存储过程

执行流程、事务和MySQL存储过程
EN

Stack Overflow用户
提问于 2016-05-01 17:30:35
回答 2查看 502关注 0票数 1

我想知道MySQL中的存储过程是否不仅仅是具有某些限制的SQL语句序列(http://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html)。

InnoDB表上的事务、DML有什么特别之处吗?

据我所知,它不是,因为我没有发现相反的。

编辑:

执行流程也是一个有趣的问题。

假设我有以下简单的过程,并且自动提交为off:

代码语言:javascript
复制
CREATE PROCEDURE someproc ()
    -> BEGIN
    ->   -- exec stmt1
    ->   -- exec stmt2  <--- assume it fails!
    ->   -- exec stmt3
    -> END//

如果stmt2因某些原因在执行过程中失败,会发生什么情况?

在我看来,stmt2更改将是回滚的,但是stmt1更改不会发生,并且过程的执行流程将停止,因此不会执行stmt3。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-01 17:44:04

MySQL存储的程序支持SQL语句之外的语法,例如声明变量、条件分支、循环、游标、动态SQL等等。从这个意义上说,它不仅仅是一系列SQL语句。

对于InnoDB表或MySQL存储程序中的事务,DML语句没有什么“特殊”。在允许的选择方面,程序是最宽松的。函数和触发器有一些限制(正如您所发现的)。这些限制主要来自函数如何被调用(作为语句中的表达式,或者触发器是如何触发的(当DML语句正在执行时)。

编辑

除非声明处理程序以捕获异常/错误,否则当在MySQL存储过程中遇到错误时,该过程的执行将停止,错误将返回给调用方。

就DML更改提交或回滚而言,这取决于表是否为MyISAM,以及是否启用了自动提交。或是否为事务发出了提交或回滚。DML语句是在存储过程中执行还是在过程之外执行并不重要。

票数 1
EN

Stack Overflow用户

发布于 2016-05-01 17:44:52

存储过程可以看作是作为一个事务执行的一组SQL语句。

事务性质在处理并发性时非常重要。

拥有存储过程的另一个好处是将访问控制应用于存储过程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36969692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档