MySQL 事务看这里:
举个栗子:
表里两个账户,余额分别为 1000 块钱:
现在 Robin 准备给 Camilla 转 500 块钱,那么此时得同时更新两个账户的余额 balance。
转账成功,余额发生变化:
突然,Robin 在转账过程中出现意外情况(先初始化双方余额到 1000):
在这里抛出了异常,转账终止,再查询下余额:
这就违反了事务的一致性,所以应该对整个转账流程做事务的处理,才能保证事务的特性,当转账成功时,事务直接提交给 MySQL,而如果转账失败或者被中断,则回滚到最初的状态。
现在对 SQL 的操作方法都是重新获取一个连接,如果要做事务处理,得保证在同一个连接下,那么需要对方法做下修改:
Connection 由外部进行处理,并传参,这样可以保证在同一个连接做好事务处理:
事务的隔离级别:
还是看这里 MySQL事务
初始化表记录:
设置读取记录的隔离级别为 TRANSACTION_READ_UNCOMMITTED:
先查询下 Robin 的余额:
执行以下更新操作,然鹅并不提交事务:
执行成功,余额已变为 500,其实数据表的记录还是 1000,说明隔离级别起作用了。但是这样的结果是不想看到的,毕竟多个事务之间并发执行的话,会造成读取记录的各种问题,所以应该选择合适的隔离级别。其他隔离级别,各位看官可以试试。
最好的方式是在命令行里面去设置隔离级别,如果需要经常切换数据库,而且在数据库的隔离级别未知的情况下,在代码里面设置就很方便了,你觉得呢?
嘿嘿~
以上为本人的一些学习笔记,如有出错欢迎指正,陆续更新!!!












网友评论