数据库并发

Database concurrency

我们公司有一个小测验。我无法通过我将在下面描述的测验。我们有 3 笔交易。在这些事务 select sum(b) from a returns 1000 之前。在 table 中的值不是 10、20 或 30。隔离级别是 read committed。所有 3 个事务并行执行。

交易 №1

select sum(b) from a;
commit;

交易 №2

insert into a values (30);
insert into a values (20);
insert into a values (10);
commit;

交易 №3

delete from a where b = 10;
delete from a where b = 20;
delete from a where b = 30;
commit;

第一笔交易会返回什么?首先我注意到没有 start transaction 声明。你能解释一下结果吗?我已经回答了1010但是我错了

第二个小测验我也过不了。我将在下面描述它。条件相同,但隔离级别为 read uncommitted.

交易 №1

start transaction;
select sum(b) from a;
commit;

交易 №2

start transaction;
insert into a values (30);
insert into a values (20);
insert into a values (10);
commit;

交易 №3

start transaction;
delete from a where b = 10;
delete from a where b = 20;
delete from a where b = 30;
commit;

我猜数据库是mysql(innodb),但在测验中没有指定。

我假设每个事务仅并行启动一次。

在第一个测验中,连接将在自动提交模式下工作。因此,结果可以是 1000、1030、1050、1060、1010。由于插入和删除的顺序,1020 和 1040 是不可能的。

在第二个测验中,数据库将隔离完整的事务,因此结果可能是 1000 或 1060。