对于典型的Web使用,将MySQL隔离设置为“读未提交”(脏读)是否安全? 即使有复制?

我正在使用典型CRUD Web使用模式的网站:类似于用户创build/更新内容和其他用户阅读内容的博客或论坛。

在这种情况下,似乎可以将数据库的隔离级别设置为“ 读未提交 ”( 脏读 )。 我对“未提交”的一般缺点的理解是,读者可能会读取未提交的数据,这些数据稍后将被回滚。

在CRUD博客/论坛使用模式中,是否会有任何回滚? 即使有,读取未提交的数据是否存在重大问题?

现在我没有使用任何复制,但是如果我将来想要使用复制(基于行,不是基于声明),“未读取”隔离级别会阻止我这样做?

你怎么看? 有没有人试图在他们的RDBMS上使用“Read Uncommitted”?

您可以安全地使用基于行的复制,但不能基于语句。

READ UNCOMMITTED的问题不在于可能会出现回滚 – 至less,这不是主要问题。 主要关心的是你可能会得到部分数据。 例如,使用博客,假设您有一个汇总表,其中包含已存在的post数。 你也有一个表格,每行都有一行。 很明显,我在这里制造东西 – 这不是一个你应该拥有的结构。

无论如何,在一个线程中,您启动一​​个事务,将汇总表中的post数量从4更新为5,插入新的post行,并提交事务。 完美的作品。

在另一个线程中,您可以阅读post的数量并将博客显示在一个屏幕上。 这个查询(非常快)发生在UPDATE和INSERT语句之间。 post数显示为“5”,如果幸运的话,您有4篇博文。 如果你在编码方面不太好,而且实际上使用了汇总号而不是显示它,那么你就有一个数组溢出的条件。

在大多数情况下,READ COMMITTED是你想提供适当的一致性。