- 浏览: 994616 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
一,事务的4个基本特征
Atomic(原子性):
事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要
么全部成功,要么全部失败。
Consistency(一致性):
只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初
状态。
Isolation(隔离性):
事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正
确性和完整性。同时,并行事务的修改必须与其他并行事务的修改
相互独立。
Durability(持久性):
事务结束后,事务处理的结果必须能够得到固化。
以上属于废话
二,为什么需要对事务并发控制
如果不对事务进行并发控制,我们看看数据库并发操作是会有那些异常情形
Lost update:
两个事务都同时更新一行数据,但是第二个事务却中途失败退出,
导致对数据的两个修改都失效了。
Dirty Reads:
一个事务开始读取了某行数据,但是另外一个事务已经更新了此数
据但没有能够及时提交。这是相当危险的,因为很可能所有的操作
都被回滚。
Non-repeatable Reads:
一个事务对同一行数据重复读取两次,但是却得到了不同的结果。
Second lost updates problem:
无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其
中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成
第一次写操作失效。
Phantom Reads:
事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查
询中未出现的数据(这里并不要求两次查询的SQL语句相同)。这是
因为在两次查询过程中有另外一个事务插入数据造成的。
三, 数据库的隔离级别
为了兼顾并发效率和异常控制,在标准SQL规范中,定义了4个事务隔
离级别,(ORACLE和SQLSERER对标准隔离级别有不同的实现 )
Read Uncommitted:
直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别
的事务可以读到这个改变.这是很不安全的.
Read Committed:
直译就是"读提交",意思就是语句提交以后即执行了COMMIT以后
别的事务就能读到这个改变.
Repeatable Read:
直译就是"可以重复读",这是说在同一个事务里面先后执行同一个
查询语句的时候,得到的结果是一样的.
Serializable:
直译就是"序列化",意思是说这个事务执行的时候不允许别的事务
并发执行.
四,隔离级别对并发的控制
下表是各隔离级别对各种异常的控制能力。
LU | DR | NRR | SLU | PR | |
RU | Y | Y | Y | Y | Y |
RC | N | N | Y | Y | Y |
RR | N | N | N | N | Y |
S | N | N | N | N | N |
(注:LU:丢失更新;DR:脏读;NRR:非重复读;SLU:二类丢失更新;PR:幻像读)
顺便举一小例。
MS_SQL:
--事务一
set transaction isolation level serializable
begin tran
insert into test values('xxx')
--事务二
set transaction isolation level read committed
begin tran
select * from test
--事务三
set transaction isolation level read uncommitted
begin tran
select * from test
在查询分析器中执行事务一后,分别执行事务二,和三。结果是事务二会等待,而事务三则会执行。
ORACLE:
--事务一
set transaction isolation level serializable;
insert into test values('xxx');
select * from test;
--事务二
set transaction isolation level read committed--ORACLE默认级别
select * from test
执行事务一后,执行事务二。结果是事务二只读出原有的数据,无视事务一的插入操作。
读者是否发现MS_SQL和ORACLE对并发控制的处理有所不同呢?
五,锁
下表是锁的兼容或冲突情形。
现有 S U X
请求
S Y Y N
U Y N N
X N N N
现有
S
U
X
申请
S
Y
Y
N
U
Y
N
N
X
N
N
N
oracle:
六,隔离级别与锁
七,注意点
一般处理并发问题时的步骤:
1、开启事务。
2、申请写权限,也就是给对象(表或记录)加锁。
3、假如失败,则结束事务,过一会重试。
4、假如成功,也就是给对象加锁成功,防止其他用户再用同样的方式打开。
5、进行编辑操作。
6、写入所进行的编辑结果。
7、假如写入成功,则提交事务,完成操作。
8、假如写入失败,则回滚事务,取消提交。
9、(7.8)两步操作已释放了锁定的对象,恢复到操作前的状态。
对多表的操作最好一起取得锁,或则保证处理顺序;个人感觉还是前者好,虽然效率低一些
八,附
查看锁
ORACLE:
select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status
from v$locked_object l, all_objects a
where l.object_id=a.object_id;
MS_SQL:EXEC SP_LOCK
转载自:http://case0079.iteye.com/blog/205201
发表评论
-
SQL查询前10条记录(SqlServer/mysql/oracle/sybase)[语法分析] (转)
2011-04-22 00:45 5409这篇文章主要是分析下 ... -
SQL Group by Having 学习(转)
2011-04-19 10:33 1489在select 语句中可以使 ... -
使用PreparedStatement防止SQL注入(转)
2011-04-18 14:58 1784一条效率差的sql语句, ... -
JDBC Class.forName作用(转)
2011-04-13 14:53 1194使用JDBC时,我们都会很自然得使用下列语句: ... -
关于数据库内连接外连接左连接右连接(转)
2011-03-26 19:04 1574内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础 ... -
PreparedStatement效率为什么高/为什么要使用PreparedStatement代替Statement(转)
2011-03-25 09:28 2773在JDBC应用中,如果你 ... -
浅谈数据库索引(转)
2011-03-23 10:10 1183数据库索引是为了增加查询速度而对表字段附加的一 ... -
漫谈数据库索引(转)
2011-03-23 10:00 1023一、引言 对数据库索引的关注从未淡出我的们的讨论,那 ... -
用SQL语句去掉重复的记录(转)
2011-03-23 01:25 6802海量数据(百万以上) ... -
数据库范式(转)
2011-03-23 01:18 1415当前我们使用的主流数 ... -
mysql中limit的用法详解[数据分页常用] (转)
2011-01-08 16:44 1395在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据, ... -
查询优化的必要性(转)
2010-12-19 09:55 1470查询优化的最终目的是为了提高数据库系统的性能 ... -
Oracle导出数据(转)
2010-12-14 15:33 14801.1 exp 使用方法及 ... -
oracle初次使用
2010-12-14 13:06 1084以前都习惯了使用MySQL ... -
Mysql连接字符串大全(转)
2010-08-15 21:25 4829mysql JDBC 驱动常用的有两个,一个是gj ... -
Mysql的transaction实现(转)
2010-08-15 15:02 1941transaction在数据库编程 ... -
Hibernate 各种数据库的配置(转)
2010-07-22 20:27 16111. MySql连接配置 MySql数据库的hib ... -
左连接、右连接、全连接及区别(转)
2010-05-16 15:23 4288上节我们介绍了表连接,更确切的说是inner joins內连接 ... -
查询重复记录sql (转)
2010-05-16 15:23 1235这是我的一次笔试题,是查询一个表(id,name)中重复的记录 ... -
我的面试题总结之三:海量数据查询优化(精)(转)
2010-05-16 15:21 2404这是我面试的 ...
相关推荐
介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响
数据库_事务隔离级别与锁
数据库事务和隔离级别
数据库事务隔离级别.docx数据库事务隔离级别.docx数据库事务隔离级别.docx
查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别
数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为 Read uncommitted:允许脏读。 Read committed: 防止脏读,最常用的隔离级别,并且是大多数数据库的默认隔离级别。 Repeatable read:可以防止脏...
数据库事务的四种隔离级别的特点描述,他们的使用热度,以及各种锁在隔离级别下的释放时机。
mysql数据库事务隔离级别借鉴.pdf
事务隔离级别 课程目标 了解 —— 事务隔离级别的概念; 理解 —— 事务隔离的四种级别; 掌握 —— 事务隔离级别的设置; 事务隔离级别 事务隔离:每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互...
mysql数据库事务隔离级别[参照].pdf
通过此文档,让你完全了解数据库事务与隔离技术,SQL SERVER,ORACLE在不同事务隔离级别的区别,以及两种数据库本身的特点
目录 数据库事务的隔离级别 2 数据库ACID理论 2 原子性 2 一致性 2 隔离性 2 持久性 3 事务隔离级别 3 Read Uncommitted(读取
同时,并行事务的修改必须与其他并行事务的修改 相互独立。 Durability(持久性): 事务结束后,事务处理的结果必须能够得到固化。 以上属于废话 二,为什么需要对事务并发控制 如果不对事务进行并发控制,我们看...
数据库中事务的四大特性(ACID
持久性(Durability):持久性指对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。 2. 隔离级别 Serializable(串行化):可避免脏读、不可重复读、幻读的发生。 Rep
性能高和事务完全隔离性无法同时满足,DB提供了4项事务隔离级别来权衡,需要用户根据自身业务来选择合适的隔离级别。隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。我们的数据库锁,...
事务的属性:1.Propagation:用来设置事务的传播行为事务的传播行为:一个方法运行在了一个开启了事务的方法中时,当前方法是使用原来的事务还是开启了一个新
为什么会出现数据库的隔离级别呢? 数据库隔离级别是为了解决数据库并发访问过程中产生的各种数据安全问题. 事务的基本要素(ACID) 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能...
oracle 事务隔离级别 事务不同引发的状况: 脏读(Dirty reads) 一个事务读取另一个事务尚未提交的修改时,产生脏读 很多数据库允许脏读以避免排它锁的竞争。 不可重复读(Nonrepeatable reads) 同一查询在同一事务中...