Oracle11g oracle中的update语句是否在没有更新行的情况下保持锁定
如果我在oracle中运行一个update语句,该语句说“0行已更新”,因为它与where子句不匹配,并且我没有提交,那么它是否仍然持有表中任何保护的锁?我的猜测是否定的,但我无法证明这一点。在没有更新任何内容的更新之后,不会持有行锁(毕竟,如果没有行,应该锁定哪一行?) 您的事务仍将有一些共享锁(在表上),但这些锁仅用于防止其他事务更改表。它基本上与select语句在表上获得的“锁”类型相同 : 只有当写入程序修改某行时,该行才会被锁定 : 行锁,也称为TX锁,是表的单行上的锁。事务为修改的每一行获取一个行锁Oracle11g oracle中的update语句是否在没有更新行的情况下保持锁定,oracle11g,Oracle11g,如果我在oracle中运行一个update语句,该语句说“0行已更新”,因为它与where子句不匹配,并且我没有提交,那么它是否仍然持有表中任何保护的锁?我的猜测是否定的,但我无法证明这一点。在没有更新任何内容的更新之后,不会持有行锁(毕竟,如果没有行,应该锁定哪一行?) 您的事务仍将有一些共享锁(在表上),但这些锁仅用于防止其他事务更改表。它基本上与select语句在表上获得的“锁”类型相同 : 只有当写入程序修改某行时,该行才会被锁定 : 行锁,也称为TX锁,是表的单行上的锁。事务为修改的每
因此,如果没有行被更改,就不会有锁。在没有更新任何内容的更新之后,不会保留任何行锁(毕竟,如果没有行,应该锁定哪个行?) 您的事务仍将有一些共享锁(在表上),但这些锁仅用于防止其他事务更改表。它基本上与select语句在表上获得的“锁”类型相同 : 只有当写入程序修改某行时,该行才会被锁定 : 行锁,也称为TX锁,是表的单行上的锁。事务为修改的每一行获取一个行锁
因此,如果没有行被更改,就不会有锁。它不持有任何锁 简单测试用例
行锁定的条件相同(如果存在,两个会话将删除同一行) 它没有任何锁 简单测试用例
- 包含DML语句的事务在该语句修改的行上获取排他的行锁。在锁定事务提交或回滚之前,其他事务无法更新或删除锁定的行
- 包含DML语句的事务不需要对子查询或隐式查询(例如WHERE子句中的查询)选择的任何行获取行锁。DML语句中的子查询或隐式查询保证在查询开始时保持一致,并且看不到它所属的DML语句的效果
- 事务中的查询可以看到同一事务中以前的DML语句所做的更改,但不能看到在其自身事务之后开始的其他事务的更改
- 除了必要的排他行锁之外,包含DML语句的事务在包含受影响行的表上至少获取行排他表锁。如果包含的事务已持有该表的共享、共享行独占或独占表锁,则不会获取行独占表锁。如果包含的事务已经持有行共享表锁,Oracle数据库会自动将该锁转换为行独占表锁
- 包含DML语句的事务在该语句修改的行上获取排他的行锁。在锁定事务提交或回滚之前,其他事务无法更新或删除锁定的行
- 包含DML语句的事务不需要对子查询或隐式查询(例如WHERE子句中的查询)所选的任何行获取行锁。DML语句中的子查询或隐式查询保证在查询开始时保持一致,并且不会看到它所属的DML语句的效果的
- 事务中的查询可以看到同一事务中以前的DML语句所做的更改,但不能看到在其自身事务之后开始的其他事务的更改
- 除了必要的排他行锁之外,包含DML语句的事务在包含受影响行的表上至少获取行排他表锁。如果包含该事务的事务已持有该表的共享、共享行排他或排他表锁,则不获取行排他表锁d、 如果包含的事务已经持有行共享表锁,Oracle数据库会自动将该锁转换为行独占表锁