在Mysql读写并发时可能造成:
1.事务隔离性问题
2.脏读、幻读、不可重复读
写写并发可能存在数据更新的丢失问题
读读并发不会产生问题
MVCC是一种数据库事务并发控制技术,在Mysql中可以使用InnoDB存储引擎实现
通过数据库中的隐式字段undo日志和 readview来实现的
1.开启MVCC,首先需要将Mysql的隔离级别设置为至少可重复读
2.在设置隔离级别之后需要在创建表的时候使用 InnoDB存储引擎,并且启用事务支持
3.向表中插入两条数据
4.可以通过一下命令来开启一个新的事务
begin; 或者 start transaction;
5.查询表中数据,在可重复读的隔离级别下,普通查询生成了一个readview
6.在另一个终端开启另一个事务
begin;
7.对css表进行增加数据
此时如果第二事务不进行提交,那么第一事务会查询不到id=3的记录,此时没有产生幻读,也不能修改id=3的记录
如果修改会报:错误1205(HY000):超过锁定等待超时;尝试重新启动事务
将第二事务提交:commit;
8.在第一事务中查询 此时没有产生幻读
但是在第一事务中修改 此时产生了幻读,因为这条记录是最新的记录所以产生了幻读
这是因为在执行update时将新记录里面的隐藏列trx_id变成了第一事务的事务编号
所以第一事务再次查询时就能查到最新的id=3的记录,这时就产生了幻读(两次查询结果不一致)
在mysql可重复读的隔离级别下并没有彻底解决幻读只是在很大程度上解决了幻读的发生。