mysql数据库并发场景下,使用锁 和mvcc(数据的多版本控制)来实现事物的隔离级别。从而保障并发场景下数据的安全性。
事务的隔离级别有4种,从低到高:读未提交,读已提交,可重复读,串行化。
并发场景可能产生的数据安全问题:更新丢失,脏读,不可重复读,幻读
1)更新丢失
当两个或多个事务更新同一行,会产生更新丢失现象。可以分为回滚覆盖和提交覆盖。
。回滚覆盖:一个事务回滚操作,把其他事务已提交的数据给覆盖了。
。提交覆盖: 一个事务提交操作,把其他事务已提交的数据给覆盖了。
2)脏读
一个事务读取到了另一个事务修改但未提交的数据。
3)不可重复读
一个事务中(数据库中的体现,在一个命令行界面1.开启事务begin; 2.操作。。。3.commit提交事务。这三个步骤算一个事务。)多次读取同一行记录结果不一致。后面读取的跟前面读取的不一致。
4)幻读
一个事务中多次按相同条件查询,结果不一致。后续查询的结果和前面查询的结果不同,多了或少了几行记录。
事务隔离级别 | 回滚覆盖 (就是上文讲的更新丢失问题) | 脏读(一个事务读取到了另一个事务修改但未提交的数据) | 不可重复读(一个事务中多次读取同一行记录结果不一致。后面读取的跟前面读取的不一致) | 提交覆盖 | 幻读 |
---|---|---|---|---|---|
读未提交 | X | 可能发生的 | <