窗口1:
begin transaction
insert into t1
update t1
delete from t1窗口2:
select * from t1当窗口1 的事务未commit(或rollback),窗口2的查询就被阻塞,致使系统性能受到很大的影响。
with(unlock)虽然可以查询,但会把脏数据也读过来。
with(readpast)只能把未被update、delete的记录读过来。
如何才能让窗口2 select把窗口1的事务更改前的记录读出来呢?即就是当一个会话更新数据后未提交时,其它会话读取到更新前的结果。还望高手指点,不胜感激!
begin transaction
insert into t1
update t1
delete from t1窗口2:
select * from t1当窗口1 的事务未commit(或rollback),窗口2的查询就被阻塞,致使系统性能受到很大的影响。
with(unlock)虽然可以查询,但会把脏数据也读过来。
with(readpast)只能把未被update、delete的记录读过来。
如何才能让窗口2 select把窗口1的事务更改前的记录读出来呢?即就是当一个会话更新数据后未提交时,其它会话读取到更新前的结果。还望高手指点,不胜感激!
这个会造成用户的疑惑的.
共享锁: 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。独占锁:用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。独占锁:只允许进行锁定操作的程序使用,其他任何对他的操作均不会被接受。执行数据更新命令时,SQL Server会自动使用独占锁。当对象上有其他锁存在时,无法对其加独占锁。1)排它锁
新建两个连接
在第一个连接中执行以下语句
begin tran
update table1
set A='aa'
where B='b2'
waitfor delay '00:00:30' --等待30秒
commit tran
在第二个连接中执行以下语句
begin tran
select * from table1
where B='b2'
commit tran若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒来源于:http://www.51testing.com/?uid-258885-action-viewspace-itemid-180776
还是不行啊!
with(readpast)还是读不到update、delete的记录啊!