MySQL 事务

Posted wjq2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 事务相关的知识,希望对你有一定的参考价值。

  事务的定义

  事务是一组原子性的SQL查询,或者说一个独立的工作单元。

  

  生活中的例子

  假设一个银行的数据库有两张表:支票(checking)表和储蓄(savings)表。从某个用户的支票账户转移200元到储蓄账户,需要至少3个步骤:

  1 检查支票账户的余额至少有200元。

  2 支票账户余额减去200元。

  3 储蓄账户余额增加200元。

  上述3个步骤的操作必须打包在一个事务中,对应的事务SQL语句如下:(commit对应rollback)

1 start transaction;
2 select balance from checking where customer_id = 10;
3 update checking set balance = balance - 200
4 where customer_id = 10;
5 update savings set balance = balance + 200
6 where customer_id = 10;
7 commit;

 

  事务的ACID特性

  原子性

  整个事务中的所有操作要么全部提交成功,要么全部失败回滚。

  一致性

  数据库总是从一个一致性状态转换到另外一个一致性状态。在前面的例子中,如果执行完第3条语句、第4条语句还未开始时系统崩溃,支票账户不会损失200元,因为事务没有提交,所以事务中所做的修改不会保存到数据库中。

  隔离性

  一个事务所做的修改在提交以前,对其他事务是不可见的。在前面的例子中,如果执行完第3条语句、第4条语句还未开始时,有另外一个事务查询了支票账户余额,则会看到余额没有减少200元。

  持久性

  事务提交后其所做的修改会永久保存到数据库中。

 

  参考资料

  《高性能mysql》 P6-7

以上是关于MySQL 事务的主要内容,如果未能解决你的问题,请参考以下文章

基础-事务

理解片段事务期间片段的生命周期方法调用

提交带有全屏片段的片段事务

使用 OnItemClickListener 列出视图片段到片段事务

Android中的片段事务问题

Android从后台堆栈中删除事务