MySQL 事务看这里:

举个栗子:

表里两个账户,余额分别为 1000 块钱:

现在 Robin 准备给 Camilla 转 500 块钱,那么此时得同时更新两个账户的余额 balance。


转账成功,余额发生变化:


突然,Robin 在转账过程中出现意外情况(先初始化双方余额到 1000):


在这里抛出了异常,转账终止,再查询下余额:


这就违反了事务的一致性,所以应该对整个转账流程做事务的处理,才能保证事务的特性,当转账成功时,事务直接提交给 MySQL,而如果转账失败或者被中断,则回滚到最初的状态。

现在对 SQL 的操作方法都是重新获取一个连接,如果要做事务处理,得保证在同一个连接下,那么需要对方法做下修改:

Connection 由外部进行处理,并传参,这样可以保证在同一个连接做好事务处理:


事务的隔离级别:
还是看这里 MySQL事务

初始化表记录:

设置读取记录的隔离级别为 TRANSACTION_READ_UNCOMMITTED:

先查询下 Robin 的余额:


执行以下更新操作,然鹅并不提交事务:

执行成功,余额已变为 500,其实数据表的记录还是 1000,说明隔离级别起作用了。但是这样的结果是不想看到的,毕竟多个事务之间并发执行的话,会造成读取记录的各种问题,所以应该选择合适的隔离级别。其他隔离级别,各位看官可以试试。

最好的方式是在命令行里面去设置隔离级别,如果需要经常切换数据库,而且在数据库的隔离级别未知的情况下,在代码里面设置就很方便了,你觉得呢?
嘿嘿~

以上为本人的一些学习笔记,如有出错欢迎指正,陆续更新!!!
网友评论