postgresql锁定表的方法

  介绍

这篇文章主要介绍postgresql锁定表的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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

在多个用户访问数据库的时候若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

数据库中有两种基本的锁:排它锁(专用锁)和共享锁(锁)分享。

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

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

<强>锁命令语法

锁命令基础语法如下:

LOCK  [, TABLE ]   的名字   ,在   lock_mode

名称:要锁定的现有表的名称(可选模式限定)。如果只在表名之前指定,则只锁定该表。如果未指定,则锁定该表及其所有子表(如果有)。

lock_mode:锁定模式指定该锁与哪个锁冲突。如果没有指定锁定模式,则使用限制最大的访问独占模式。可能的值是:访问共享,行,行独家,独家分享更新,分享,分享行独家,独家,独家访问。

一旦获得了锁,锁将在当前事务的其余时间保持。没有解锁表命令;锁总是在事务结束时释放。

<强>死锁

当两个事务彼此等待对方完成其操作时,可能会发生死锁。尽管PostgreSQL可以检测它们并以回滚结束它们,但死锁仍然很不方便。为了防止应用程序遇到这个问题,请确保将应用程序设计为以相同的顺序锁定对象。

<强>咨询锁

PostgreSQL提供了创建具有应用程序定义含义的锁的方法。这些被称为咨询锁。由于系统不强制使用它们,所以正确使用它们取决于应用程序。咨询锁对于不适合MVCC模型的锁定策略非常有用。

例如,咨询锁的一个常见用途是模拟所谓“平面文件“数据管理系统中典型的悲观锁定策略。虽然存储在表中的标志可以用于相同的目的,但是通知锁更快,避免了表膨胀,并且在会话结束时由服务器自动清理。

<强>实例

创建公司表(下载公司SQL文件),数据内容如下:

runoobdb #, select  *,得到公司;   |,id  name  |, age  |, address , |,薪水   - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - -   1,才能|,Paul  |, 32, |,加州|,20000   ,2 |,Allen  |, 25, |, Texas ,, |, 15000   ,3 |,Teddy  |, 23, |, Norway ,, |, 20000   ,4 |,Mark  |, 25, |, Rich-Mond  | 65000年   ,5 |,David  |, 27日,|,Texas ,, |, 85000   ,6 |,Kim , |, 22, |, South-Hall |, 45000   ,7 |,James  |, 24, |, Houston , |, 10000   (7,行)

下面的示例将runoobdb数据库中公司的表锁定为访问专属模式。

锁语句只在事务模式下工作。

runoobdb=#开始;   LOCK  TABLE  company1  ACCESS 拷贝;EXCLUSIVE 模式;

上面操作将得到下面结果:

LOCK 表

上面的消息指示表被锁定,直到事务结束,并且要完成事务,您必须回滚或提交事务。

postgresql锁定表的方法