六、事务-4.并发事务问题

六、事务-4.并发事务问题_第1张图片

一、脏读

事务A执行3个操作,第1个操作执行select语句,第2个操作执行update语句。

注意:事务没有执行完成的时候,事务是没有提交的。只有事务的3个操作完成之后,事务才会提交。

但事务A中第2个操作,会把表结构中的id为1的数据进行更新。(但事务A没有提交

六、事务-4.并发事务问题_第2张图片

此时,事务B来查询id为1的数据,会查到事务A第2操作更新之后的数据(但事务A没有提交

六、事务-4.并发事务问题_第3张图片

事务B读取到事务A没有提交的数据——脏读。

二、不可重复读

事务A执行4步操作,第1步执行select语句,

六、事务-4.并发事务问题_第4张图片

此时,事务B执行update操作,把id为1的数据更新,并将此次操作提交到数据库,

六、事务-4.并发事务问题_第5张图片

事务A执行第3步select语句,此时数据跟第1步查到的不一样

六、事务-4.并发事务问题_第6张图片

三、幻读

事务A执行4步操作,第1步执行select语句,发现id为1没有数据

六、事务-4.并发事务问题_第7张图片

此时,并发事务B执行insert操作,把id为1的数据插入,并提交数据库.

六、事务-4.并发事务问题_第8张图片

事务A执行第2步insert操作,此时不能插入成功,会报错,因为id是主键,主键不能重复

六、事务-4.并发事务问题_第9张图片

事务A执行第3步select操作,还是差不到数据(前提:解决了不可重复读的问题,即读取同一条记录,两次读取的数据是相同的......第1次select操作查不到,第3次select操作也查不到)

六、事务-4.并发事务问题_第10张图片

你可能感兴趣的:(MySQL,数据库)