相关文章推荐
坚强的猴子  ·  PostgreSQL遍历Json_posgr ...·  2 月前    · 
跑龙套的皮蛋  ·  PostgreSQL遍历Record各例的值 ...·  2 月前    · 
踏实的墨镜  ·  PostgreSQL:遍历文本数组并执行SQ ...·  4 天前    · 
伤情的消防车  ·  RDS ...·  4 天前    · 
活泼的领结  ·  PostgreSQL为什么不能用CLOG来独 ...·  4 天前    · 
失恋的铁板烧  ·  SpringBoot静态资源文件位置 - ...·  9 月前    · 
玉树临风的冲锋衣  ·  替换字符串中的多个字符,无需使用任何嵌套替换函数·  1 年前    · 
高大的红薯  ·  开发效率提升50%以上,爱奇艺官网主站的Nu ...·  1 年前    · 
苦闷的烤红薯  ·  vba 转换多种格式日期_vba ...·  1 年前    · 
谦逊的沙滩裤  ·  Flink基础(53):FLINK ...·  1 年前    · 
Code  ›  PostgreSQL LOCK锁定数据库表的方法开发者社区
大数据 云数据库 事务 postgresql
https://cloud.tencent.com/developer/article/1859214
忧郁的麻辣香锅
1 年前
作者头像
用户5005176
0 篇文章

PostgreSQL LOCK锁定数据库表的方法

原创
前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 网站知识 > PostgreSQL LOCK锁定数据库表的方法

PostgreSQL LOCK锁定数据库表的方法

原创
作者头像
用户5005176
修改 于 2021-08-11 10:52:20
1.2K 0
修改 于 2021-08-11 10:52:20
举报

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

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

数据库中有两种基本的锁:排它锁(Exclusive Locks)和共享锁(Share Locks)。

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

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

LOCK 命令语法

LOCK 命令基础语法如下:

LOCK [ TABLE ]
lock_mode
  • name:要锁定的现有表的名称(可选模式限定)。如果只在表名之前指定,则只锁定该表。如果未指定,则锁定该表及其所有子表(如果有)。
  • lock_mode:锁定模式指定该锁与哪个锁冲突。如果没有指定锁定模式,则使用限制最大的访问独占模式。可能的值是:ACCESS SHARE,ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE,ACCESS EXCLUSIVE。

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

死锁

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

咨询锁

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

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

实例

创建 COMPANY 表,数据内容如下:

runoobdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
 
推荐文章
坚强的猴子  ·  PostgreSQL遍历Json_posgrepsql 存储过程 遍历json对象数组
2 月前
跑龙套的皮蛋  ·  PostgreSQL遍历Record各例的值[遍历表的行和列]_postgresql record
2 月前
踏实的墨镜  ·  PostgreSQL:遍历文本数组并执行SQL开发者社区
4 天前
伤情的消防车  ·  RDS PostgreSQL的PASE插件(IVFFlat或HNSW算法)向量检索_云数据库 RDS(RDS)-阿里云帮助中心
4 天前
活泼的领结  ·  PostgreSQL为什么不能用CLOG来独立地判断事务是否运行,而要去遍历Proc Array呢?_问答-阿里云开发者社区
4 天前
失恋的铁板烧  ·  SpringBoot静态资源文件位置 - codedot - 博客园
9 月前
玉树临风的冲锋衣  ·  替换字符串中的多个字符,无需使用任何嵌套替换函数
1 年前
高大的红薯  ·  开发效率提升50%以上,爱奇艺官网主站的Nuxt实践 - 掘金
1 年前
苦闷的烤红薯  ·  vba 转换多种格式日期_vba 日期格式为yyyymmdd_VB.Net的博客-CSDN博客
1 年前
谦逊的沙滩裤  ·  Flink基础(53):FLINK SQL(30) 内置函数(11)字符串函数(二)_51CTO博客_flink sql 窗口函数
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号