DML语句的锁--对TM锁和TX锁的理解

 

     

    当我们执行一个DML语句时,会产生DML的锁,

    DML锁包括table-level locks(TM)和Row-level locks(TX) 

    DML的语句包括select for update, delete, insert, update

     

    关于lock以前我们在文章里已经分析过一次。

    详见http://blog.csdn.net/inthirties/archive/2009/10/04/4632532.aspx

    在这篇文章里,我们具体讲到了v$lock表里的字段的含义,v$lock视图,是记载的有关对象的锁的信息。

     

    这里的文章具体讲解的是其总的TX和TM锁。


    A table-level lock (TM type) is set for any DML transaction that modifies a table: INSERT, UPDATE, DELETE, SELECT...FOR UPDATE, or LOCK TABLE. The table lock prevents DDL operations that would conflict with the transaction.  
    table lock(TM type)是防止和事务冲突的DDL操作,比如在insert时防止表被drop。 当我们发起了TM锁的时候,DDL语句会检查这个TM锁,发现对象已经TM锁了,DDL语句会报错,提示资源正在使用。如果有另一个update同一个表对象的时候,同样会申请一个TM锁,但是

    如果事务结束,这个对应DML语句的TM也会消失。

     

    TM 是对象锁,表示可能在这个对象上做了什么操作,还没有结束,所以不允许ddl。update 0 条记录,因为锁定发生在真实修改发生之前,不知道会修改多少记录,所以tm先产生了,结果却没有更新到任何记录,也就没使用回滚段,于是没有tx产生 


    The row-level lock (TX type) is automatically acquired for each row modified by INSERT, UPDATE, DELETE, or SELECT...FOR UPDATE statements. The row-level lock ensures that no other user can modify the same row at the same time. Therefore, there is no risk that a user can modify a row that is being modified and not yet committed by another user.  
    说明row-level lock(TX type)是为了确保其它用户不可以在相同的时间修改相同的行。 


    TX 是事务锁,表示发起了一个事务,发起事务的判别标准,是根据 是否使用回滚段中作为评判标准的。 
    也就是说,TM表示你锁定了系统中的一个对象,对于数据库系统表来说 可以看作锁定了 一个object的记录别人不能对这个object的记录进行 删除和修改。而tx呢,是以回滚段的使用作为标准的,通常情况下,使用了回滚段就涉及到了记录行,我们习惯上认为是记录发生了变化(插入、修改、删除)。如下,我们发起一个事务,没有修改任何记录,但是已经使用了回滚段,在回滚段事物表中就能找着记录了。 
    exec dbms_output.put_line( dbms_transaction.local_transaction_id(true) );  
    然后查看V$LOCK发现产生了TX锁。 
    select * from v$lock;



     

     




     

     

    • 0
      点赞
    • 1
      收藏
      觉得还不错? 一键收藏
    • 打赏
      打赏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    inthirties

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值