为了账号安全,请及时绑定邮箱和手机立即绑定

数据库隔离级别及事务概念

标签:
SQL Server

事务

  • 事务是逻辑上的一组操作,所谓一组即是说明这一组操作具有逻辑上的关系,例如原子性:组成事务的逻辑单元不可分割。隔离性:事务的执行不应该受到其他事务的影响。一致性:事务执行前后,数据完整性保持一致。持久性:事务一旦提交后,就会持久化(保存)到数据库中。

事务并发引起的安全问题

事务的概念是相对于多个事务并发而言的,离开多个事务这个前提来讨论事务是没有意义的
1.脏读:A读到了B正在update但是未commit的数据,举个例子:A老板正在给B发工资5000元,B此时查自己账户上有了5000元,A老板发现B的工资应该是2000元,进行了rollback。这里的B查到的5000元就是脏读数据。
2.不可重复读:通俗的讲不可重复读意思是,同一个事务重复读取同一数据时出现了前后不一致的问题。举个例子:A查到自己账户上有2000元,打算去消费,此时C盗刷(update)了A的2000元,并提交了事务(commit),A结账的时候账户的2000变成了0,这里前后两次查询到的数据不一致就是不可重复读的问题。
3.重复读(幻读/虚读):这个概念和不可重复读容易混淆,对比的来说。

  • 不可重复读指的是A事务读到了B事务已经update并commit的数据,导致前后两次读取同一数据不一致。

  • 虚读指的是A事务读到了B事务insert并commit的数据,导致前后两次读取同一数据不一致。

事务的隔离级别

  • read uncommitted :啥都避免不了,脏读,不可重复读,虚读都会出现

  • read commited : 只能避免脏读(oracle,SqlServer默认都是折翼级别)

  • repeatable read :能避免脏读和不可重复读(mysql默认)

  • serializable :(序列化)啥都能避免,有点类似于单线程,性能最低


在实际编程中遇到的问题:

  • mysql和oracle在update或insert、delete后都要commit,但是mysql的工具例如,sqlyog和navcat默认都自动提交,操作完后不需要手动commit,oracle的工具 plsqldeveloper 默认没有自动提交,只有当手动commit或者关闭当前SQL window时才会提交



作者:kk爱自由
链接:https://www.jianshu.com/p/b216cb4c6cff



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 1
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消