数据库并发
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。
我们公司有一个小测验。我无法通过我将在下面描述的测验。我们有 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。