Mysql存储过程(一)——原子性
来源:互联网 发布:网络视听许可证 编辑:程序博客网 时间:2024/05/01 02:28
Mysql中,单个Store Procedure(SP)不是原子操作,而oracle则是原子的。如下的存储过程,即使语句2失败,语句1仍然会被commit到数据库中:
Sql code 1-1:
要使整个存储过程成为一个原子操作的办法是:在存储过程主体开始部分,指定开始一个事务。语句2失败,语句1不会被commit到数据库中,存储过程将会在调用时抛出一个异常。
Sql code 1-2:
在指定了整个存储过程作为一个事务的情况下,最后必须要主动commit或者rollback以结束该事务,如下的代码,如果缺少语句1,最终也是不会被commit到数据库中的。
Sql code 1-3:
还有一个比较诡异的地方,就是,如果在存储过程中commit了,接下来的语句就均变成非事务控制的了,如下代码,在语句1处commit,接下来语句2成功,但是语句3和语句2的PK是一样,整个存储过程应该抛PK重复的异常。而执行后发现,语句2的结果被正常commit到数据库中了,而语句3抛出一个异常:
Sql code 1-4:
如果要想Sql code 1-4中的语句2和语句3作为一个整体,则需要再重新启用一个事务,如下代码,这样,调用的时候,语句1可以正常commit,语句3出错,存储过程会抛异常而不会把语句2的执行结果commit到数据库:
Sql code 1-5:
- Mysql存储过程(一)——原子性
- Mysql存储过程(一)——原子性
- mysql存储过程(一)
- Mysql 存储过程(一)
- mysql 存储过程(一)
- mysql存储过程(一)
- MYSQL存储过程(一)
- mysql存储过程(一)
- MySql存储过程实例解析(一)
- Mysql存储过程数据汇总(一)
- mysql 存储过程 (一) 基础
- MySQL存储过程的学习(一)
- mysql实操(一)—使用存储过程模拟实现用户登录
- MySQL之存储过程(一)
- MySQL——存储过程
- MySQL——存储过程
- MYSQL——存储过程
- MySql存储过程—变量
- 腾讯提供的QQ在线样式——QQ客服功能,非浮动的!
- 什么是DC
- js+xslt 分页控件
- 软件体系结构认识
- sql查询,nolock写还是不写,这是一个问题
- Mysql存储过程(一)——原子性
- 测试一下
- jquery的XPath选择器
- 数据库优化方法 (一)
- 使用SQL Server Business Intelligence Development Studio 2005设计报表模型时的一个容易被忽视的问题
- Internet 平台下的软件开发之网构软件
- [转]SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
- 浅谈兼容性
- C#中Thread与ThreadPool的比较