数据库事务
来源:互联网 发布:unity3d 多个摄像机 编辑:程序博客网 时间:2024/06/04 19:32
http://blog.sina.com.cn/s/blog_8e5354210101j1to.html
- 丢失更新:两个事务同时更新一行数据,最后一个事务的更新会覆盖掉第一个事务的更新,从而导致第一个事务更新的数据丢失,这是由于没有加锁造成的;
- 脏读:一个事务看到了另一个事务未提交的更新数据;
- 不可重复读:在同一事务中,多次读取同一数据却返回不同的结果;也就是有其他事务更改了这些数据;
- 幻读:一个事务在执行过程中读取到了另一个事务已提交的插入数据;即在第一个事务开始时读取到一批数据,但此后另一个事务又插入了新数据并提交,此时第一个事务又读取这批数据但发现多了一条,即好像发生幻觉一样。
为了解决这些并发问题,需要通过数据库隔离级别来解决,在标准SQL规范中定义了四种隔离级别:
- 未提交读(Read Uncommitted):最低隔离级别,一个事务能读取到别的事务未提交的更新数据,很不安全,可能出现丢失更新、脏读、不可重复读、幻读;
- 提交读(Read Committed):一个事务能读取到别的事务提交的更新数据,不能看到未提交的更新数据,不可能可能出现丢失更新、脏读,但可能出现不可重复读、幻读;
- 可重复读(Repeatable Read):保证同一事务中先后执行的多次查询将返回同一结果,不受其他事务影响,可能可能出现丢失更新、脏读、不可重复读,但可能出现幻读;
- 序列化(Serializable):最高隔离级别,不允许事务并发执行,而必须串行化执行,最安全,不可能出现更新、脏读、不可重复读、幻读。
隔离级别越高,数据库事务并发执行性能越差,能处理的操作越少。因此在实际项目开发中为了考虑并发性能一般使用提交读隔离级别,它能避免丢失更新和脏读,尽管不可重复读和幻读不能避免,但可以在可能出现的场合使用悲观锁或乐观锁来解决这些问题。
0 0
- 【事务一】数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- 数据库事务
- SSH进阶(1)——javax.mail 实现邮件发送
- 畅通工程续
- c# 复制文件后新的文件变成只读文件
- mysql 数据库 如何获取刚刚插入的自增长的id号
- Spring 整合Structs
- 数据库事务
- Kettle——表输出步骤异常处理方式探究
- ibatis 架构
- 3 Maven-POM文件说明
- Spring (五) 声明式事务
- 设置软件启动界面图片(Xcode 7.2)
- 抽象工厂模式
- HDU 1207 汉诺塔II
- 单元测试续集