当前位置: 首页 > news >正文

关于事务和丢失更新

1.1.1    事务的特性:(面试)

事务四大特性:

  * 原子性(Atomicity)  :强调的事务的不可分割.

  * 一致性(Consistency)    :强调的事务的执行前后,数据库的的完整性保持一致.

  * 隔离性(Isolation)  :强调的事务的并发的访问,一个事务的执行,不应该受到另一个事务的打扰.

  * 持久性(Durability) :强调的事务结束之后,数据就永久的保存的数据库中.

 

如果不考虑事务的隔离性:引发一些安全性问题.

  * 脏读       :一个事务,读到了另一个事务未提交数据.

  * 不可重复读 :一个事务,读到了另一个事务的提交数据(update).导致查询结果不一致.

  * 虚读(幻读) :一个事务,读到了另一个事务的提交数据(insert).导致查询结果不一致

 

数据库中事务的隔离级别:

  * read uncommitted(未提交读) :脏读、不可重复读、虚读都是有可能发生的.

  * read committed(已提交读)   :避免脏读,但是不可重复读和虚读是有可能发生的.

  * repeatable read(重复读)    :避免脏读、不可重复读.但是虚读是有可能发生的.

  * serializable(串行的)       :避免脏读、不可重复读、虚读的发生.

 

  * 安全性:read uncommitted   <  read committed  < repeatable read  < serializable

  * 效率:read uncommitted  > read committed  > repeatable read > serializable

 

  ***** 数据库会比对安全性和效率问题:一般不会采用read uncommitted 和 serializable

  * MYSQL数据库默认的隔离级别:repeatable read

  * Oracle数据库默认的隔离级别:read committed

 

mysql中做一个事务操作,不想被别的事物操作打扰,就只能把隔离级别设置成串行化(serializable).这样就是单线程.速度慢.

oracle中可以把隔离级别设置成自身固有的readonly隔离级别.

这种隔离级别可以查,不可以改.

面试问oracle有几个隔离级别,答案有三个!

自身支持的两个和一个固有的readonly.

关于Oracle支持的隔离级别:

 

 

1.1.2    JDBC中设置事务的隔离级别:

conn.setTransactionIsolation(int level) --- 设置事务的隔离级别.

 

1.1.13   丢失更新(扩展)

解决:

  1.悲观锁:假设丢失更新一定会存在,采用是数据库一种锁机制.(排他锁)

  2.乐观锁:假设丢失更新不一定存在,采用在数据库中添加一个字段完成.

悲观锁解决原理:

乐观锁解决原理:

 

本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4090919.html,如需转载请自行联系原作者

相关文章:

  • SAP R3 display Vendor list, MKVZ .
  • HAproxy+keepalived安装配置教程
  • SMO学习笔记(三)——效验数据库备份文件
  • sqlite - java 初学
  • 魅力 .NET:从 Mono、.NET Core 说起
  • Ubuntu使用Remastersys封装制作系统ISO镜像
  • HTML5新增的元素详解
  • fedora学习笔记 7:su与su-切换用户
  • c语言第六次作业
  • Delphi编写事件模型客户端(2)
  • nginx日志切割代码
  • [Android]竖直滑动选择器WheelView的实现
  • 刻录机读空白盘时提示无法打开
  • 枚举项的数量限制在64个以内
  • 关于C和C++语言声明和定义的说明
  • python3.6+scrapy+mysql 爬虫实战
  • 0x05 Python数据分析,Anaconda八斩刀
  • django开发-定时任务的使用
  • Docker 笔记(2):Dockerfile
  • JavaScript设计模式系列一:工厂模式
  • JavaScript中的对象个人分享
  • quasar-framework cnodejs社区
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Wamp集成环境 添加PHP的新版本
  • 多线程 start 和 run 方法到底有什么区别?
  • 二维平面内的碰撞检测【一】
  • 给Prometheus造假数据的方法
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 如何设计一个比特币钱包服务
  • 如何设计一个微型分布式架构?
  • 实战|智能家居行业移动应用性能分析
  • 我有几个粽子,和一个故事
  • 学习JavaScript数据结构与算法 — 树
  • 赢得Docker挑战最佳实践
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​如何防止网络攻击?
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #大学#套接字
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (¥1011)-(一千零一拾一元整)输出
  • (独孤九剑)--文件系统
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (理论篇)httpmoudle和httphandler一览
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Linq学习笔记
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (轉貼) UML中文FAQ (OO) (UML)
  • .NET 8.0 发布到 IIS
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 使用配置文件
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • [ 第一章] JavaScript 简史