参考一个事务中 可以查询自己未提交的数据吗_最详细MySQL事务隔离级别及原理讲解!(二)-CSDN博客
一个事务中 可以查询自己未提交的数据吗_趣说数据库事务隔离级别与原理_weixin_39747293的博客-CSDN博客
【MySql:当前读与快照读】_当前读和快照读_QuietThinking的博客-CSDN博客
PostgreSQL实战之事务与并发控制(二)_postgresql 默认事务级别_auspicious航的博客-CSDN博客
当前事务默认级别:
SELECT current_setting ('default_transaction_isolation')
结果:read committed (读已提交)
一个事务的sql:
能读到当前事务修改的数据
Begin transaction;
-- SELECT * FROM "budget_base_config";
SELECT sum(deadline) FROM "budget_base_config";
update "budget_base_config" set deadline=12 where period='2023-07';
-- SELECT * FROM "budget_base_config";
SELECT sum(deadline) FROM "budget_base_config";
commit;
结果 123 24
read committed级别能解决脏读问题。其他事务未提交的数据无法读取
2个事务
事务1未提交
Begin transaction;
SELECT sum(deadline) FROM "budget_base_config";
update "budget_base_config" set deadline=11 where period='2023-07';
SELECT sum(deadline) FROM "budget_base_config";
-- commit;
结果121 21
事务2查询之前的数据
Begin transaction;
-- SELECT * FROM "budget_base_config";
SELECT sum(deadline) FROM "budget_base_config";
结果121
但是read committed是不可重复读的,一个事务中读取的2次数据的时间间隔里因为另一个事务的提交,导致前后2次数据读取不一致
事务一执行
Begin transaction;
SELECT sum(deadline) FROM "budget_base_config";
结果121
事务二执行
Begin transaction;
update "budget_base_config" set deadline=11111 where period='2023-07';
commit;
事务一再执行
SELECT sum(deadline) FROM "budget_base_config";
结果
11121
设置当前会话的隔里级别为REPEATABLE READ(可重复读)
事务一执行
START TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SHOW transaction_isolation;
Begin transaction;
SELECT sum(deadline) FROM "budget_base_config";
结果11121
事务二执行
Begin transaction;
update "budget_base_config" set deadline=1 where period='2023-07';
SELECT sum(deadline) FROM "budget_base_config";
commit;
结果11
事务一执行
SELECT sum(deadline) FROM "budget_base_config";
结果11121
可见现在事务一前后读取数据一致