PostgreSQL - Locks(锁)

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

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

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

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

来源:LearnFk无涯教程网

数据库自动执行锁定,但是,在某些情况下,必须手动控制锁定,可以通过使用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语句仅在事务模式下有效-

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

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

LOCK TABLE

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

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

技术教程推荐

快速上手Kotlin开发 -〔张涛〕

玩转Spring全家桶 -〔丁雪丰〕

人人都能学会的编程入门课 -〔胡光〕

Java业务开发常见错误100例 -〔朱晔〕

容器实战高手课 -〔李程远〕

深入浅出分布式技术原理 -〔陈现麟〕

李智慧 · 高并发架构实战课 -〔李智慧〕

大厂广告产品心法 -〔郭谊〕

云原生架构与GitOps实战 -〔王炜〕

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