悲观与乐观锁定
关系数据库系统(RDBMS)在修改(例如,更新或删除)表记录时采用各种锁定策略来强制实施事务 ACID 属性。有时,当两个并发事务无法进行时,可能会发生死锁,因为每个事务都在等待对方释放锁定。在本系列的第 1 部分中,我们知道了什么是关系数据库中的对象锁定、不同类型的锁定和死锁。在今天的后续文章中,我们将比较悲观锁定和乐观锁定的优缺点。
第 1 部分:概述、锁粒度和死锁
最近,我们有一些关于数据库事务的文章,有关强制执行四个 ACID 属性(原子性、一致性、隔离性、持久性)。在今天的文章中,我们将研究关系数据库(RDBMS)用于强制执行 ACID 属性的另一种机制,即对象锁定。具体来说,我们将了解它是什么,它在 RDBMS 事务中扮演什么角色,以及锁定可能导致的一些副作用。虽然数据库对象锁定可能是一个相当技术性和复杂的主题,但我们会以浅白的用语解释它并尽可能简单易明。
DBeaver 和 Navicat 都是通用数据库工具,这意味着它们支持所有流行的数据库,包括 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite。此外,两者还兼容云数据库,如 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Cloud 和 MongoDB Atlas。但是,正如俗话说“细节决定成败”,因此,虽然这两个产品乍一看可能看起来相似,但仔细研究两个工具的视觉感染力、安全连接性和 NoSQL 支持就会发现它们之间的差异数量远远超过任何明显的相似之处。
在我担任 IT 顾问的早期,我依靠各种开源工具来完成我的工作。我的理由是,我节省购买商业产品的成本。几年后,我才意识到商业产品实际上可以通过简化和自动化定期执行的许多常见工作来节省时间和金钱。
早在 2020 年 8 月,SQL Count() 函数的多种用法文章概述了 COUNT 的许多输入参数变体。使用 COUNT() 函数的另一种方法是将其与 GROUP BY 子句结合使用。将 COUNT() 函数与 GROUP BY 结合使用对于根据各种分组分解计数很有用。在今天的文章中,我们将通过使用 Navicat Premium 作为我们的数据库客户端来查询 Sakila 示例数据库,来学习如何按照不同的准则对计数进行分组。
- 2022 (1)
- 2021 (1)
- 2020 (1)
- 2019 (1)
- 2018 (1)
- 2017 (1)
-
合作伙伴