mysql存储过程之事务管理

mysql存储过程之事务管理

ID:35515147

大小:104.50 KB

页数:8页

时间:2019-03-25

mysql存储过程之事务管理_第1页
mysql存储过程之事务管理_第2页
mysql存储过程之事务管理_第3页
mysql存储过程之事务管理_第4页
mysql存储过程之事务管理_第5页
资源描述:

《mysql存储过程之事务管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MySQL存储过程之事务管理MySQL存储过程之事务管理ACID:Atomic、Consistent、Isolated、Durable存储程序提供了一个绝佳的机制来定义、封装和管理事务。1,MySQL的事务支持MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关:Java代码1MyISAM:不支持事务,用于只读程序提高性能2InnoDB:支持ACID事务、行级锁、并发3BerkeleyDB:支持事务隔离级别:隔离级别决定了一个session中的事务可能对另一个session的影响、并发session对数据库的操作、一个session中所见数据的一致性ANSI标准定义了

2、4个隔离级别,MySQL的InnoDB都支持:Java代码4READUNCOMMITTED:最低级别的隔离,通常又称为dirtyread,它允许一个事务读取还没commit的数据,这样可能会提高性能,但是dirtyread可能不是我们想要的5READCOMMITTED:在一个事务中只允许已经commit的记录可见,如果session中select还在查询中,另一session此时insert一条记录,则新添加的数据不可见6REPEATABLEREAD:在一个事务开始后,其他session对数据库的修改在本事务中不可见,直到本事务commit或rollback。在一个事务中重复selec

3、t的结果一样,除非本事务中update数据库。7SERIALIZABLE:最高级别的隔离,只允许事务串行执行。为了达到此目的,数据库会锁住每行已经读取的记录,其他session不能修改数据直到前一事务结束,事务commit或取消时才释放锁。可以使用如下语句设置MySQL的session隔离级别:Java代码8SETTRANSACTIONISOLATIONLEVEL{READUNCOMMITTED

4、READCOMMITTED

5、REPEATABLEREAD

6、SERIALIZABLE}MySQL默认的隔离级别是REPEATABLEREAD,在设置隔离级别为READUNCOMMITTED或SE

7、RIALIZABLE时要小心,READUNCOMMITTED会导致数据完整性的严重问题,而SERIALIZABLE会导致性能问题并增加死锁的机率事务管理语句:Java代码1STARTTRANSACTION:开始事务,autocommit设为0,如果已经有一个事务在运行,则会触发一个隐藏的COMMIT2COMMIT:提交事务,保存更改,释放锁3ROLLBACK:回滚本事务对数据库的所有更改,然后结束事务,释放锁4SAVEPOINTsavepoint_name:创建一个savepoint识别符来ROLLBACKTOSAVEPOINT5ROLLBACKTOSAVEPOINTsavepoint

8、_name:回滚到从savepoint_name开始对数据库的所有更改,这样就允许回滚事务中的一部分,保证更改的一个子集被提交6SETTRANSACTION:允许设置事务的隔离级别7LOCKTABLES:允许显式的锁住一个或多个table,会隐式的关闭当前打开的事务,建议在执行LOCKTABLES语句之前显式的commit或rollback。我们一般所以一般在事务代码里不会使用LOCKTABLES2,定义事务MySQL默认的行为是在每条SQL语句执行后执行一个COMMIT语句,从而有效的将每条语句独立为一个事务。在复杂的应用场景下这种方式就不能满足需求了。为了打开事务,允许在COMMI

9、T和ROLLBACK之前多条语句被执行,我们需要做以下两步:1,设置MySQL的autocommit属性为0,默认为12,使用STARTTRANSACTION语句显式的打开一个事务如果已经打开一个事务,则SETautocommit=0不会起作用,因为STARTTRANSACTION会隐式的提交session中所有当前的更改,结束已有的事务,并打开一个新的事务。使用SETAUTOCOMMIT语句的存储过程例子:Java代码8CREATEPROCEDUREtfer_funds9(from_accountint,to_accountint,tfer_amountnumeric(10,2))1

10、0BEGIN11SETautocommit=0;1213UPDATEaccount_balanceSETbalance=balance-tfer_amountWHEREaccount_id=from_account;1415UPDATEaccount_balanceSETbalance=balance+tfer_amountWHEREaccount_id=to_account;1617COMMIT;18END;使用STARTTRANSACITO

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。