PostgreSQL - Locks(锁)

PostgreSQL - Locks(锁) 首页 / PostgreSQL入门教程 / PostgreSQL - Locks(锁)

排他锁或写锁可防止用户修改行或整个表,然后,在事务期间,由UPDATE和DELETE修改的行将被自动锁定,这样可以防止其他用户更改行,直到事务被提交或回滚为止。

用户必须等待其他用户的唯一时间是他们尝试修改同一行时,如果他们修改不同的行,则无需等待, SELECT查询永远不必等待。

数据库自动执行锁定,但是,在某些情况下,必须手动控制锁定,可以通过使用LOCK命令来完成手动锁定,它允许指定事务的锁类型和范围。

无涯教程网

LOCK命令语法

LOCK命令的基本语法如下-

LOCK [ TABLE ]
name
 IN
lock_mode
  • name            - 要锁定的现有表的名称,如果在表名之前指定了ONLY,则仅该表被锁定,如果未指定ONLY,则该表及其所有后代表将被锁定。

  • lock_mode  - 锁定模式指定与该锁定冲突的锁定。如果未指定锁定模式,则使用限制最大的ACCESS EXCLUSIVE模式。可能的值为:ACCESS SHARE, ROW SHARE,ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE,ACCESS EXCLUSIVE。

死锁(DeadLocks)

当两个事务正在彼此等待完成其操作时,可能会发生死锁,为防止您的应用程序遇到此问题,请确保以将它们以相同顺序锁定对象的方式设计它们。

LOCK示例

考虑表COMPANY 具有以下记录:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Learnfk |  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 rows)

下面的示例以ACCESS EXCLUSIVE模式锁定testdb数据库中的COMPANY表。 LOCK语句仅在事务模式下有效-

链接:https://www.learnfk.comhttps://www.learnfk.com/postgresql/postgresql-locks.html

来源:LearnFk无涯教程网

testdb=#BEGIN;
LOCK TABLE company1 IN ACCESS EXCLUSIVE MODE;

上面给出的PostgreSQL语句将产生以下输出-

LOCK TABLE

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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Java核心技术面试精讲 -〔杨晓峰〕

Flink核心技术与实战 -〔张利兵〕

手机摄影 -〔@随你们去〕

MySQL 必知必会 -〔朱晓峰〕

玩转Vue 3全家桶 -〔大圣〕

计算机基础实战课 -〔彭东〕

Web 3.0入局攻略 -〔郭大治〕

云计算的必修小课 -〔吕蕴偲〕

程序员职业规划手册 -〔雪梅〕

好记忆不如烂笔头。留下您的足迹吧 :)