003 MySQL隔离级别,从事务开始讲起1

学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册

也可以看看比较经典的书籍,如《高性能MySQL》等


1、事务通俗易懂的解释:多条语句(操作)要么全部执行成功,要么全部执行失败。

要么“全部执行失败”再解释下:假设总共4条语句,只要有其中1条执行失败了,那么就判定为“全部执行失败”。失败时,4条语句中已经执行成功的需要恢复成未执行这4条语句原来的样子。

举个例子:假设某银行的数据库中有2张表,支票(checking)表和储蓄(savings)表。小明(customer_id=12345)要从他的支票账户往他的储蓄账户转100元钱,那么需要三个步骤:

(1)检查小明的支票账户余额是否大于100元;

(2)从小明的支票账户减去100元;

(3)把小明的储蓄账户增加100元;

上面的三个步骤必须在一个事务中,也就是说,要么全部成功要么全部失败。只要任何一个步骤失败,就必须回滚所有操作,恢复成没有执行任何一条语句的样子。

事务的SQL如下:

1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 12345;
3 UPDATE checking SET balance = balance - 100.00 WHERE customer_id = 12345;
4 UPDATE savings SET balance = balance + 100.00 WHERE customer_id = 12345;
5 COMMIT;

假如没有在一个事务中,会出现啥情况呢?

(1)上面的第3条语句执行完(支票账号减少了100元),正要开始执行第4条语句,结果数据库系统崩溃了,假设这些语句不在一个事务中,那么就会出现,小明的支票账号减少了100元,储蓄账号没有增加100块,小明白白损失100元。

2、事务的4大特性

(1)原子性

一个事务必须视为一个不可分割的最小工作单元,要么全部成功提交操作,要么全部失败回滚造作。

(2)一致性

数据库总是从一个一致性的状态转换到另一个一致性的状态。

不会出现上面说的:第3条语句执行完(支票账号减少了100元),正要开始执行第4条语句,结果数据库系统崩溃了,小明的支票账号减少了100元,储蓄账号没有增加100块,小明白白损失100元。

因为第4句和第5句没有执行,事务最终没有提交,所以所做的修改不会保存到数据库中。

(3)隔离性

一个事务所做的修改在最终没有提交之前,对其他的事务是不可见的。

例如:第3条语句执行完(支票账号减少了100元),还没有执行第4条语句,因为没有提交,所以此时的其他线程是看不到支票账号减少100元的。

(4)持久性

一旦事务提交(第5句执行完),则所做的所有修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值