gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:47:28 25 4
gpt4 key购买 nike

我在一个具有典型 CRUD 网络使用模式的网站上工作:类似于用户创建/更新内容和其他用户阅读内容的博客或论坛。

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

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

现在我没有使用任何复制,但将来如果我想使用复制(基于行,而不是基于语句),“Read Uncommitted”隔离级别会阻止我这样做吗?

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

最佳答案

MySQL 5.1 在使用未提交读和二进制日志(复制所需)时更加严格 - 因此您可能会在一些简单的更新/删除语句中遇到错误,而这些错误在默认隔离级别 REPEATABLE READ 中不会出现。我见过简单的 PK 更新,例如:

更新 foo set bar=1 where id=1234;

错误:mysql_real_query 错误 1598 消息:二进制无法记录。消息:InnoDB 中的事务级别“READ-UNCOMMITTED”对于 binlog 模式 'STATEMENT' 不安全

因此,您必须准备好通过在修改数据时切换回可重复读取来处理此问题,或者使用单独的连接进行读取和写入,并使用它们自己的隔离级别。当/如果您的项目需要扩展和复制时,后者会派上用场,因此您可以将选择发送到只读从站并在主站上写入。

OTOH,如果不严格需要一致的读取,那么使用未提交的读取可能是一个真正的收获,因为 Innodb 需要的锁更少。

至于回滚是否可能的问题,我认为您是最好的告诉我们的人,因为您是编写代码的人:)。

关于mysql - 对于典型的 Web 使用,将 MySQL 隔离设置为 “Read Uncommitted”(脏读)是否安全?即使有复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2025815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com