MySQL 事务中的不可重复读和幻读问题

Read Committed(不可重复读):
假设事务1读取了一条记录(select user_name from user where user_id = 1),获得user_name = '456',事务1暂时没提交。事务2更新了一条记录(update user set user_name = '123' where user_id = 1),事务2提交。此时事务1再次select user_name from user where user_id = 1获得了user_name = '123',这样就致使事务1在读取同一行数据却获得不一样的user_name。这就是所谓的不能够重复读事务

Repeatable Read(可重复读,会产生幻读):
这个跟不可重复读相反,当事务1查询到user_name='456'时,事务2将user_name更新成'123'并提交,事务1再次查询仍是会发现user_name='456',这样保证了可重复读。幻读的话就是当事务2插入一条新的数据id为2并提交,事务1因为可重复读的性质,只能在表中查到id为1的数据,若是此时事务1插入id为2的数据则会产生错误,由于此时表中已经有了id为2的数据,可是事务1只看到了id为1的数据。it

相关文章
相关标签/搜索