首先把前提和场景设好:
1.两个线程要操作数据库,本质是两个事务要操作数据库,读也好,改也好,插也好,删也好。
2.两个事务所跨时区一定存在交集,在操作同一行时候,并且至少有一个事务对行中数据有修改。
3.两个事务地位相同,虽然一个事务中会有就会有更删改查的操作,但我们只关心与另一个有交集的事务在影响同一步时的情况。以同一时间,两个事务对同一行的操作,并且必有一个事务是对该行的更改操作。暂不考虑增删操作,只考虑读改操作。那么就只有两种情况,A事务读,B事务改;AB都是改,一般这种都是由行锁保证顺序执行,不会出问题,即发现两个事务对某行都有改操作,那么这两个事务会顺序执行(猜测)。
4.在一个读一个改并在同一行的前提下,即A事务在读某一行时发现B务正好对该行有改操作,是否等待B事务执行完,不等就是读不提交,等就是读提交。
各种隔离级别事务分析:
1.A读,不等B提交,无法保证A读的数据是否与B提交后或者提交后回滚的数据一致,出现脏读。
2.A读,等B提交,
待搞清楚问题:
1.增删操作会锁表吗?
2.对行有更改操作,数据库默认就会锁行吗?可否不锁?
3.两个事务对某行有改操作,这两个事务会顺序执行吗?