Postgresql锁的简单介绍

  锁主要是为了保持数据库数据的一致性,可以阻止用户修改一行或整个表,一般用在并发较高的数据库中。

  在多个用户异步访问数据库时,如果不对其进行限制可能会出现读取数据和存储数据的不一致性。

  数据库中有两种基本的锁:共享锁(SHARE)、排它锁(EXCLUSIVE)。

如果数据对象加上排它锁,则其他的事务不能对它读取修改

如果加上共享锁,则该数据库对象可以被其他事务读取,但不能修改

  锁的基本语法:LOCK [ TABLE ] name IN lock_mode

  即以某种模式去锁定某张表,lock_mode有ACCESS SHARE,ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE,ACCESS EXCLUSIVE等,具体格式可参考:Postgresql锁模式

  获得锁之后,锁一般情况下都会继续保持,并且总是在事务结束时释放(包括事务提交和事务回滚)。

  上述参考自菜鸟教程:PostgreSQL LOCK(锁)


  上述介绍通常是用于表级锁,下面简单介绍一下行级锁。

  与表级锁不同的是,行级锁不阻塞对于数据的查询,行级锁只是阻塞对同一行的写入。

扫描二维码关注公众号,回复: 11363985 查看本文章

  要在不修改某行的前提下请求一个排斥行级锁,用 SELECT FOR UPDATE选取该行。一旦我们请求了特定的行级锁,就可以在事务中进行多次更新而不用担心冲突。

  要在某一行请求一个共享行级锁,用SELECT FOR SHARE选取该行。一个共享锁并不阻止其他的事务请求同一个共享锁,不过,其他事务不允许更新、删除或者使用排斥锁锁住持有共享锁的行。任何其他企图都会被锁住等待共享锁的释放。

猜你喜欢

转载自blog.csdn.net/qq_33247435/article/details/100212005