大家好,我想问一个问题,是关于sql server 事务的,事务有原子性,一致性、隔离性,持久性,但是我看并发的控制时,就有 一个这样的问题,当我用显示事务控制并发的时候,从begin tran 到end tran时,这是一个事务,但是为什么在begin 和end之间会有其他的事务进行呢,这个不是与事务的隔离性和我原子性有冲突吗?我有点不理解,请指教?谢谢

解决方案 »

  1.   

    每条dml语句都是一个默认事务,用set xact_abort on 可以让begin tran 到 commit tran中所有事务一起进行提交(回滚)
    也就是定义一个大事务
      

  2.   

    在并发的时候,为什么在begin 和end之间会有其他的事务进行呢,这个不是与事务的隔离性和原子性有冲突吗?难道是我理解的隔离和原子的概念有问题?呵呵
      

  3.   

    你结合1楼,2楼如果设置整个begin end 为大事务,这就是一个原子,一起提交事务。如果再设置事务隔离级别的话,就是要先执行第一个begin end 第二个等待第一个执行完了,才执行第二个
      

  4.   

    比如你设了set xact_abort on 
    begin tran和commit tran里的内容就可以看作一个事务
    要不一起提交 要不一起回滚
    打个比方吧
    班级里有n多学生 出去跑步的时候,别人不是一个个的点名而是一起点名 某班全部到齐,某班全部不到齐等会再跑,你说你到了也没有,还得重跑
      

  5.   

    [color=#808080]没有冲突啊 俩人都可以打开来看,
    你提交保存了,
    我再保存肯定会覆盖你的。
    但是我俩同时保存的时候肯定会报错,所以我就要告诉对方,这个文章我在操作,你只能看
    [/color]但是我俩同时保存的时候肯定会报错,所以我就要告诉对方,这个文章我在操作,你只能看这个是用lock或者用隔离级别来实现的吗?事务本身能实现吗?
      

  6.   

    这个不用你管,我在看的时候就会给这个表加一个锁,别人看到这个锁,就不能更新,只能等我看完,我指的看完是select出结果为止、
      

  7.   

    大家看我的理解对不?事务:是在操作数据库的时候,是提交数据,还是回滚数据,只有这个功能,没有让别的用户等待的功能
    隔离级别:是数据库自动设置的,利用lock的功能,在insert update select delete情况下自动加适当的锁,不同的隔离级别,对insert update select delete加锁的情况不同lock:lock和隔离级别不同的是,我自己加lock 不用隔离级别来帮我控制,我自己加lock灵活我这样对三个概念理解的对吗?
      

  8.   

    事务,是为保证业务逻辑数据的一致性而存在的.
    例如A转账100元给B含2个动作,(A-100)和(B+100),这个2个动作必须一起完成(提交)或一起取消(回滚).隔离级别,是针对事务过程中锁定(Lock)范围的事先定义.SQL2000有4个事务隔离级别,
            默认在第2级:Read Commited. 详情请参考教科书..锁定,为保证数据的一致性而存在的.
    例如某时刻连线1在读取数据A,此时连线1就持有对数据A的共享锁(S Lock),其他人可读取但不可修改.
      

  9.   

    我问题的答案找到了,大家看看这个,讲的非常好
    http://www.cnblogs.com/RicCC/archive/2010/03/05/transaction-lock-isolation-level.html 
      

  10.   

    事务是具有原子性,一致性、隔离性,持久性。但是隔离型是相对来说的,不同的隔离级别,事务之间的隔离是不同,那我么我想问一下,我发的那个链接讲的,事务的隔离是用lock的机制实现的,只是不同的隔离级别保持锁的时间长短不一样,有的是比如select执行完,就释放锁,有的是保持本次事务执行完才释放,我认为这样解释合理,能说明问题,你有什么看法?