数据库事务

关于数据库的事务

这里简要的说明下数据库事务存在的原因

因为对于一个业务来说,往往一条dml语句无法直接满足这个业务的要求,需要多条dml语句才行,所以这个时候就需要事务来进行管理了。

如果一个或者同一个事物中的多个dml操作(新增、删除、修改)没有设置事务的话,它会默认自动提交,这个自动提交是不支持回滚的。

如果一个或者同一个事物中的多个dml操作(insert、delete、update)设置了事务的话

start transaction 命令用来关闭事务的自动提交

committ transaction 提交事务

rollback transaction 回滚事务(只能回滚到最后一次提交事务时的数据库各表单记录)

讲到事务肯定就要讲到事务的四大特性了

acid

原子性

事务的最小单元,不可切割

隔离性

隔离性指的是两个事务之间的隔离性(下面会具体的讲解下隔离级别)

一致性

一致性指的是在一个事务中,所有的dml操作要么同时成功,要么同时失败

持久性

持久性指的就是,当事务结束后,这里的结束指的的不管是失败还是成功,数据都要保存在数据库中才行(成功了就是成功的数据,失败了就是事务提交之前的数据)

关于事务的隔离级别

事务的隔离级别都有哪几种

读未提交(基本上不被使用)

大概意思就是事务a可以读取到事务b还没有结束时,对数据库进行操作的数据

引发的问题:事务b都没有提交,读取到的数据是脏数据,脏读指的就是这个

读已提交(oracle默认的事务隔离级别),解决了上面的脏读问题

大概意思就是事务a可以读取到事务b结束之后的数据库数据,但是每次读取到的数据可能会不一样(这里的不一样指的是,事务a第一次去读取数据库的时候,可能事务b还没有结束,这个时候读到的数据可能是只有1条,但是事务a再去读取数据库的时候,可能事务b已经结束了,这个时候读取到的数据可能就是2条了),这样就产生了 不可重复读 问题

可重复读(mysql默认的事务隔离级别),解决了上面的不可重复读问题

大概意思就是,事务a没有结束之前,在事务a中读取到的数据都是一样的,不管事务b,事务c怎么去操作数据库数据,只要事务a还没有结束,读取到的数据都是一样的,这样会引发的问题就是拿到的数据可能不是真实的数据,因为数据库数据可能已经被别的事务给修改过了,这就产生了幻读问题

序列化/串行化
大概意思就是,事务a在操作数据库的时候,就不能对数据库进行其它操作了(包括增删改查),保证绝对的安全。这样做的话安全级最高但是效率最低。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值