码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 事务

时间:2018-01-05 20:54:21      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:转换   sof   mysql   saving   定义   _id   mys   where   崩溃   

  事务的定义

  事务是一组原子性的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 事务

标签:转换   sof   mysql   saving   定义   _id   mys   where   崩溃   

原文地址:https://www.cnblogs.com/WJQ2017/p/8206502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!