数据库事务特性和隔离级别
2016-03-20 19:27
288 查看
一.事务
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
二.事务四大特性(简称ACID)
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
三. 事务并发处理会产生的问题
1.脏读:即一个事务读取到另一事务未提交的更新数据。
2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。也就是说,后续读取可以读取到另一事务已提交的更新数据
3.虚读:一个事务读取到另一事务已提交的insert数据。
四.解决并发问题——–事务隔离
a.当一个事务访问某个数据库资源时,如果执行的是select语句,必须为资源加上共享锁,如果执行的是insert,update,delete语句,必须为资源加上排他锁,这些锁锁定正在被操作的资源。
b.当第二个事务也要访问相同的资源时,加锁类型一样。但此时第二个事务并非就立即能为资源加上锁,当第一个事务为资源加的是共享锁时,第二个事务能够为资源加上共享锁,但当第一个事务为资源加的是排他锁时,第二个事务必须等待第一个事务结束,才能为资源加上排他锁。
1.共享锁
共享锁用于读取数据操作,它允许其他事务同时读取锁定的资源,但不允许其他事务更新它。
2.排他锁
排他锁用于修改数据的场合,他锁定的资源,其他事务部能读取也不能修改。
3.更新锁
更新锁在更新操作初始化截断用来锁定可能要被修改的资源,从而避免使用共享锁造成的死锁现象。
五.事务隔离级别
锁机制能有效地解决并发事务时的各种问题,但是也会影响到并发的性能。所以可以设置级别减少影响。
级别从低到高:
1.未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。
2.提交读(Read Committed):只能读取到已经提交的数据。
3.可重复读(Repeated Read):在同一个事务内的查询都是事务开始时刻一致的。
4.串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
二.事务四大特性(简称ACID)
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
三. 事务并发处理会产生的问题
1.脏读:即一个事务读取到另一事务未提交的更新数据。
2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。也就是说,后续读取可以读取到另一事务已提交的更新数据
3.虚读:一个事务读取到另一事务已提交的insert数据。
四.解决并发问题——–事务隔离
a.当一个事务访问某个数据库资源时,如果执行的是select语句,必须为资源加上共享锁,如果执行的是insert,update,delete语句,必须为资源加上排他锁,这些锁锁定正在被操作的资源。
b.当第二个事务也要访问相同的资源时,加锁类型一样。但此时第二个事务并非就立即能为资源加上锁,当第一个事务为资源加的是共享锁时,第二个事务能够为资源加上共享锁,但当第一个事务为资源加的是排他锁时,第二个事务必须等待第一个事务结束,才能为资源加上排他锁。
1.共享锁
共享锁用于读取数据操作,它允许其他事务同时读取锁定的资源,但不允许其他事务更新它。
2.排他锁
排他锁用于修改数据的场合,他锁定的资源,其他事务部能读取也不能修改。
3.更新锁
更新锁在更新操作初始化截断用来锁定可能要被修改的资源,从而避免使用共享锁造成的死锁现象。
五.事务隔离级别
锁机制能有效地解决并发事务时的各种问题,但是也会影响到并发的性能。所以可以设置级别减少影响。
级别从低到高:
1.未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。
2.提交读(Read Committed):只能读取到已经提交的数据。
3.可重复读(Repeated Read):在同一个事务内的查询都是事务开始时刻一致的。
4.串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马