数据库事务

数据库事务

事务的四个特性:

  • 原子性–原子性指的是一个事务中的所有操作要么全部成功执行,要么不执行。当其中一个操作发生异常时,事务回滚。
  • 一致性–一致性指的是当一个事务完成后,使数据从一个状态转换到另一个状态,但对于数据的完整性保持一致。
  • 隔离性–隔离性指的是当多个用户并发访问数据库时,数据库会给每个用户开启事务,以事务为单位访问,事务之间相互不影响。
  • 持久性–持久性指的是事务执行成功后,对数据的修改是持久的。

并发事务所造成的问题:

  • 丢失更新:
    • 第一类丢失–两个事务同时更新一行数据时,当其中一个事务撤销时会覆盖另一个已完成的事务更新的数据。(比如浩浩去银行存100元,这时候银行刚好要扣除年费5元,当扣除成功后,浩浩突然想起晚上越好撸友去网吧通宵,所以不存了。这就会导致账户变为原来的100元)。
    • 第二类丢失–两个事务同时更新一行数据,其中某一个事务的更新结果会被另一个事务的更新覆盖。(比如浩浩跟女友去逛街,浩浩说你去买衣服吧,我在这坐会儿,当女友选好衣服准备用浩浩的银行卡结账时,浩浩突然想起劫出了新皮肤,那一定得买一个,于是两个人同时支付,结果由于事务问题造成银行只扣了皮肤的钱(可把这货乐坏了))。
  • 脏读:–脏读指的是一个事务读取了另一事务未提交的数据。(比如浩浩的银行卡有100元,好好在深夜加班敲代码,需要一杯咖啡提提神,10元,这时浩浩的女友看中了一个口红,需要97元,两人同时支付,但系统提示浩浩余额不足只有3元了,无奈。但浩浩的女友由于密码错误也支付失败。于是浩浩郁闷,他的女友则纳闷,越想越生气(他竟然偷偷改了支付密码不告诉我)。于是这将会是一个不平静的夜晚。)
  • 幻读:–幻读指的是一个事务执行两次查询操作,但却得到不一样的结果。这是由于两次操作中间执行了一个更新数据操作的事务造成的。
  • 不可重复读:–不可重复读指的是一个事务两次读取同一行数据得到了 不同的结果。这是因为两次查询操作中间执行了一个更新数据操作的事务造成的。

注:

  • 脏读和不可重复读的区别–脏读是一个事务读取了另一个事务未提交的数据;不可重复读是一个事务读取了前一个事务已提交的数据。
  • 不可重复读和幻读的区别–不可重复读指的是事务操作同一行数据;幻读是事务操作大量数据。

事物的隔离级别:

  • Read_uncommitted–只读未提交。事务最低级别的隔离,允许一个事务可以看到另一个事务未提交的数据。只能解决第一类丢失更新的问题。
  • Read_committed–读并提交。保证了一个事务更新的数据提交后才能被另一个事务可看到。只能解决第一类更新丢失和脏读问题。
  • Repeatable_read–重复读。保证同一个事务相同条件下前后两次能够获取到一致的数据。解决了第一类丢失更新、第二类丢失更细、脏读和不可重复读问题。
  • Serilizable–序列化。事务串行序列化。解决了脏读、不可重复读和幻读。但效率差,实际开发中一般不用。

《时光隧道》-- 陈奕迅

@

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值