sql - 为什么要避免不可重复读和幻读?

标签 sql database transactions

我可以理解我们应该避免脏读,因为如果我们读取未提交的数据,其他事务可能会回滚,但在不可重复和幻读中,我们正在读取已提交的数据。如果我们读取提交的数据,问题是什么。

最佳答案

如果有人告诉您他们的名字叫史蒂夫,然后 6 个月后您再次见到他们并告诉您他们的名字叫鲍勃,这有问题吗?事实上,在这段时间里,他们合法地更改了他们的名字,这意味着事实已经改变,对你来说可能重要,也可能不重要。但它可能发生这一事实至少是需要注意的。

就个人而言,我不倾向于编写依赖于在单个事务中重复查询相同数据的代码,因此没有任何特定不可重复读取给我带来问题的情况.但我知道它们是有可能的。数据已经提交的事实(就像我上面的名称更改类比一样,在这两次中,给定的名称都是我们正在与之交谈的实体的完全提交的名称)并不意味着它不能更改。

关于sql - 为什么要避免不可重复读和幻读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710722/

相关文章:

mysql - 满足 WHERE 子句中的所有条件条件

mysql - 搜索包含数十亿条记录的 MySQL 数据库的最快方法是什么?

MySQL 多个日期分组

sql - 如何在go lang中测试事务回滚和提交

jpa - EJB JPA 事务

java - 具有多个实体的 Spring data jpa 不回滚 - PostgreSQL

mysql - SQLZOO- 使用 GROUPBY 查找大陆上最大的国家;这可能吗?

php - 如果 A 中的列不重复,则将 tableA 复制到 tableB

php - 代码中的动态 SQL 查询可能吗?

mysql - MySQL 可以处理多少个数据库?