mysql事物

一说到事务,首先会想到的就是事务回滚。

事务的开启方式:begin(开启)——>执行sql ——>{commit(提交) 或者rollback(回滚)}

那么事务涉及到的特性有那些:

原子性 :一个事务(transaction)中的所有操作,要么都完成,要么都不完成。(报错就回滚到事物开始前的状态,不报错就成功执行完成)。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。简单一点说就是数据执行前后都要处于一种合法的状态。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

事务隔离分为不同级别:

读未提交(Read uncommitted){一个事务还没提交时,它做的变更就能被别的事务看到

读提交(read committed){小华 对A表进行begin开启事物,去执行一个select * from A ,查到数据 1 ,然后小明 开启一个窗口去开启事物执行新增数据2,然后提交事物。这个时候小华再次查询可以看到小明新增的数据2,结果为1和2两条数据 

默认隔离方式可重复读(repeatable read){小华 对A表进行begin开启事物,去执行一个select * from A ,查到数据 1 ,然后小明 开启一个窗口去开启事物执行新增数据2,然后提交事物。这个时候小华再次查询结果还是为1这一条数据 

和串行化(Serializable){顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。}。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

用通俗的例子去说上面的特性:

比如支付宝的余额和余额宝。

原子性:把100余额转入余额宝,第一步先是对余额表的余额改成0,然后第二步去余额宝加上100。在这个过程就是不予许出现第一步成功第二步失败的,要么余额-100和余额宝+100一起成功,要么一起失败回滚到事务之前。

一致性:一致性简单一点说就是数据执行前后都要处于一种合法的状态,比如身份证号不能重复,性别只能是男或者女,高考的z总分数只能在0~750之间,红绿灯只有3种颜色,房价不能为负的等等, 只有符合这些约束的数据才是有效的,比如有个小孩儿跟你说他高考考了1000分,你一听就知道他胡扯呢。数据库世界只是现实世界的一个映射,现实世界中存在的约束当然也要在数据库世界中有所体现。如果数据库中的数据全部符合现实世界中的约束(all defined rules),我们说这些数据就是一致的,或者说符合一致性的。{余额的钱转到了余额宝,属于一致性。}

隔离性:有不同的隔离方式,不同的隔离方式的隔离效果也有区别,读未提交可能造成脏读,余额和余额宝的话绝不可能是 读未提交隔离机制,那样就炸了,哈哈。

持久性:事务处理后余额宝里修改后的金额是永久的,即使重启服务器或者出现也不会丢失。

说明:总结可能有些地方存在理解错误,欢迎大家指出,一起学习一起进步,也希望能够帮助到大家。

借鉴了这个大佬的博文,大家可以看一看更详细:MySQL事务有四大特性:原子性、隔离性、永久性、一致性,在 InnoDB 引擎中是怎么实现 - HackerVirus - 博客园

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值