首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MySQL隔离设置为“读取未提交”(脏读)是否安全?即使是复制?

将MySQL隔离设置为“读取未提交”(脏读)是否安全?即使是复制?
EN

Stack Overflow用户
提问于 2010-01-08 05:57:45
回答 2查看 5.2K关注 0票数 8

我正在开发一个具有典型CRUD web使用模式的网站:类似于用户创建/更新内容以及其他用户阅读内容的博客或论坛。

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

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

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

你认为如何?有人试过在RDBMS上使用“未提交的读”吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-09 02:15:53

MySQL 5.1在使用读-未提交和绑定日志(复制所需的)时更严格,因此您可以在一些简单的update/delete语句上获得错误,而这些语句在默认的隔离级别上是不可重复读取的。我看到了一些简单的PK更新,如:

更新foo设置bar=1,其中id=1234;

错误: mysql_real_query错误1598消息:二进制日志不可能。消息: InnoDB中的事务级别“读-未提交”对于binlog模式“语句”是不安全的。

因此,您必须做好准备,在修改数据时切换回可重复读取,或者使用单独的连接进行读和写,并具有它们自己的隔离级别。当/如果需要您的项目规模和复制时,后者可以方便使用,因此您可以将select发送到只读从服务器上并在主服务器上写入。

OTOH,使用读-未提交的读取可能是一个真正的好处,如果一致的读取不是严格需要,因为Innodb有较少的锁可拿。

至于是否有可能回滚的问题,我认为您是告诉我们这个问题的最佳人选,因为您是编码它的人:)。

票数 3
EN

Stack Overflow用户

发布于 2010-01-08 06:42:09

此隔离级别意味着您可能读取不一致的数据。没有人能保证您所读取的数据是从数据库的一致视图中读取的。

这是否存在问题不是MySQL问题,而是应用程序问题,这涉及使用/返回不一致数据的风险评估。

在网上银行应用程序上,它将不会被禁止。在一场比赛中,这可能是可以的。那得看情况。

我使用了“未提交的读取”和复制,没有任何问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2025815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档