协议 | 事务间冲突时 | 死锁 | 需维护的时间戳与版本 | 饿死 | 级联回滚 |
---|---|---|---|---|---|
两阶段封锁协议 two-phase locking | 阻塞 | 无或回滚(取决于具体的机制) | 事务的时间戳(取决于死锁机制),事务重启时间戳不变 | 按队列授予锁时无 | 提交后释放锁时无 |
时间戳排序 timestamp-ordering | 回滚,存在饿死时阻塞 | 无 | 读取该数据最大事务时间戳与写时间戳,事务重启使用新的时间戳 | 存在 | 存在 |
有效性检查 validation | 终止,存在饿死时阻塞 | 无 | 事务开始时间戳、开始检查时间戳、提交时间戳 | 存在 | 无 |
多版本时间戳排序 multiversion timestamp-ordering | 回滚 | 无 | 事务开始的时间戳,版本序列与读取各版本最大的事务时间戳与写时间戳 | 存在 | 存在 |
select course_id
from section as S
where semester = 'Fall' and year = 2009 and
exists (select *
from section as T
where semester = 'Spring' and year = 2010 and
S.course_id = T.course_id);
select name, salary, avg_salary
from instructor I1, lateral (select avg(salary) as avg_salary
from instructor I2
where I2.dept_name = I1.dept_name);
select cust_name, (select count(*)
from Orders
where Orders.cust_id = Customers.cust_id)
as orders_num
from Customers
order by cust_name;
关于隔离级别,可以从其发展的历史来学习