我通常会看到用户持有锁的引用。这是否意味着单个连接,所有用户帐户登录的连接等等??
这一般如何适用于Oracle和DB?
如果它适用于多个连接,人们在修改数据时是否会看到数据?
这如何适用于JDBC?
You can see any changes you have made during the transaction by querying the modified tables, but other users cannot see the changes. After you commit the transaction, the changes are visible to other users' statements that execute after the commit.
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4010.htm
答案 0 :(得分:3)
这意味着特定的用户会话。如果查看DBA_LOCKS
表,您会看到session_id
列,该列与v$session
相关并代表单个用户会话(即连接),而不是用户ID的所有会话。解释了锁定机制in the documentation。你是对的,如果不是这样,那么用户的其他会话/连接会看到未提交的更改,这是绝对不允许的(无论如何,在Oracle中,但就我所知的所有RDBMS而言)。
对于JDBC同样适用,每个锁由单个连接保持。如果您的连接池具有针对同一用户帐户的多个打开连接,则在提交之前,使用来自池的一个连接所做的更改将对其他连接不可见。因此,如果您正在执行多个语句作为逻辑事务的一部分(在这种情况下希望您没有自动提交),您需要继续为所有这些连接重用相同的连接,而不是从中获取新连接每次汇总,因为可能会或可能不会与挂起的更改相同。