读锁定和写锁定

时间:2011-10-10 12:53:02

标签: database multithreading concurrency transactions locking

我对读写锁定有点不确定,只需要有人检查这些关于读/写锁的事实是否正确。

这是一般的数据库。

阅读锁定:

  1. 多个线程可以同时获取多个读锁定。
  2. 当一个线程对行/表有读锁定时,没有线程可以更新/插入/删除该表中的数据。 (即使尝试写入数据的线程不需要写锁定。)
  3. 行/表不能同时具有读取和写入锁定。
  4. 写锁:

    1. 当一个行/表有一个写锁时,如果它们在其中实现了读锁定,则它不能被另一个线程读取,但如果没有实现读锁定,则可以被其他线程读取(即简单的选择查询)
    2. 感谢您的澄清。我无法在互联网上找到这些陈述的直接断言。

3 个答案:

答案 0 :(得分:6)

数据库管理理论中,锁定用于实现多个数据库用户之间的隔离。这是"我"首字母缩写词ACID(Atomicity,Consistency,Isolation,Durability)。锁通过TX(事务)应用于数据,这可能会阻止其他TX在TX生命期间访问相同的数据。

简单锁定:可以请求两种主要类型的锁:

  • 共享锁:读锁定,即任何其他TX可以读取但不能写入
  • 独占锁:写锁定,即没有其他TX可读或写

多重锁定: 两阶段锁定(2PL)是一种保证可串行化的并发控制方法。

  • 成长阶段(或扩展阶段或第一阶段):获取锁定并且不释放锁定。
  • 缩小阶段(或第二阶段):释放锁定并且不会获取锁定。

答案 1 :(得分:4)

取决于所使用的isolation级别。

答案 2 :(得分:0)

读取锁:

  1. 多个线程可以同时获取多个读锁。

    正确。多个读取锁可以同时存在。 (读取锁的另一个名称:共享锁)

  2. 当线程在行/表上具有读锁定时,没有线程可以更新/插入/删除该表中的数据。 (即使试图写数据的线程不需要写锁定。)

    正确。写入事务应等待读取锁完成读取。

  3. 行/表不能同时具有读取和写入锁定。

    正确。如果在读取锁之前拥有写入锁,则写入锁将阻止其他事务读取或写入同一表。如果您在写入锁定之前拥有读取锁定,则读取锁定将阻止写入事务,直到读取事务完成为止。

写锁:

  1. 当行/表具有写锁时,如果另一个线程/线程中实现了读锁,则不能被其他线程读取,但是如果没有实现读锁,则可以被其他线程读取(例如,简单的Select查询) )

    对不起,我不明白这句话。 但是,当表具有写锁(排他锁)时,另一事务将无法对其进行读写。