LOCK TABLE <table_name> IN <lock_mode> MODE [NOWAIT];
一篇文章对share模式解释如下:
共享(SHARE, S):共享锁将锁定表,仅允许其他用户查询表中的行,但不允许插入、更新或删除行。多个用户可以同时在同一个表中放置共享锁,即允许资源共享,因此得名“共享锁”。例如,如果用户每天都需要在结帐时更新日销售表,则可以在更改该表时使用共享锁以确保数据的一致性。也就是说该表只能查,其他用户想修改表中行的数据,只需要对该表进行共享锁。
他提到,其他用户想修改表中行的数据,只需要对该表进行共享锁。请问,如何进行共享锁?
一篇文章对share模式解释如下:
共享(SHARE, S):共享锁将锁定表,仅允许其他用户查询表中的行,但不允许插入、更新或删除行。多个用户可以同时在同一个表中放置共享锁,即允许资源共享,因此得名“共享锁”。例如,如果用户每天都需要在结帐时更新日销售表,则可以在更改该表时使用共享锁以确保数据的一致性。也就是说该表只能查,其他用户想修改表中行的数据,只需要对该表进行共享锁。
他提到,其他用户想修改表中行的数据,只需要对该表进行共享锁。请问,如何进行共享锁?
LOCK TABLE table IN SHARE MODE; 他提到,其他用户想修改表中行的数据,只需要对该表进行共享锁。请问,如何进行共享锁?
这句话不对吧,一个transaction对A表拥有共享锁时,其它transaction无法对A表数据进行修改。
我的理解也是这样,直到前面的session commit或rollback后,后面那个session才能修改
--------------------
拥有独占方式表封锁的事务,在出现如下条件之一时,便释放该封锁: (1)、执行COMMIT或ROLLBACK语句。 (2)、退出数据库(LOG OFF) (3)、程序停止运行。 独占方式封锁通常用于更新数据,当某个更新事务涉及多个表时,可减少发生死锁。 DML锁有如下三种封锁方式: (1)、共享封锁方式(SHARE) (2)、独占封锁方式(EXCLUSIVE) (3)、共享更新封锁(SHARE UPDATE) 其中SHARE,EXCLUSIVE用于表封锁,SHARE UPDATE用于行封锁。 1、共享方式的表封锁 共享方式的表封锁是对表中的所有数据进行封锁,该锁用于保护查询数据的一致性,防止其它用户对已封锁的表进行更更新。其它用户只能对该表再施加共享方式的锁,而不能再对该表施加独占方式的封锁,共享更新锁可以再施加,但不允许持有共享更新封锁的进程做更新。共享该表的所有用户只能查询表中的数据,但不能更新。共享方式的表封锁只能由用户用SQL语句来设置,基语句格式如下: LOCK TABLE <表名>[,<表名>]... IN SHARE MODE [NOWAIT]
文章出处:http://www.diybl.com/course/7_databases/oracle/oraclexl/200866/123090.html