这是一道作业题。
对于以下事务,说明将在不降低数据库完整性的情况下最大化吞吐量的隔离级别。解释答案。
将 coursed_id = 'CPSC1350' 标识的课程从一个系更改为另一个系。
Courses 表包含有关课程的信息:它们的 id、名称、提供课程的部门、教师的 id 以及可以参加的最大学生人数 (max_size)。课程(coursed_id: string, cname: string, dept: string, instructor_id: string, max_size:integer) – 主键:coursed_id – 外键:instructor_id references Instructors
假设使用 PostgreSQL。
我相信交易可以使用 read committed 来完成,因为
- 脏读不正常,因为正在进行更新,因此涉及读取
- 不可重复读取是可以的,因为其他人不太可能更改值
- 幻影是可以的,因为没有
SELECT
陈述
我在正确的轨道上吗?
这个问题看起来像一个谜题,看起来很简单,但也许不是那么简单,或者它只是假装很复杂......我会尽力按照我的理解来回答它。如果我误解了一些明显的提示,我深表歉意。
使用 PostgreSQL,没有真正的
Read uncommitted
- 你得到Read committed
. 引用文档:这个问题对我来说听起来不是很清楚,因为当您同时进行查询并且没有提到其他查询时,隔离级别很重要,所以如果我错过了什么,请不要怪我太多。
如果我们将剩余的隔离级别按照“Read committed”->“Repeatable read”->“Serializable”的顺序排列,开销会相应增加。所以我们需要以相同的顺序检查它们,一旦我们满意了,就不需要检查剩余的水平(它们会很好,但开销更大)。据我了解,
UPDATE Courses set dept = 'New department' coursed_id = ’CPSC1350’
是否完成了所需的工作。从 描述 Read committed 隔离级别的Postgre 文档中,我会说在这种情况下我对这种行为感到满意,所以我会继续,
READ COMMITTED
除非问题中没有提到其他限制。