TM锁和TX锁的理解

来源:互联网 发布:阿里云上传文件 编辑:程序博客网 时间:2024/04/30 04:14

刚刚看到inthirties老大新发表的一篇关于TM和TX锁的问题,想起来以前自己也在论坛里发过一个帖子问为什么叫TX何TM,呵呵。文章不错,截取一段存起来,方便将来参考。

 

=================================================================================

 

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

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

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

 

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呢,是以回滚段的使用作为标准的,通常情况下,使用了回滚段就涉及到了记录行,我们习惯上认为是记录发生了变化(插入、修改、删除)。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/inthirties/archive/2009/10/11/4652842.aspx

原创粉丝点击