首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保多个选择是独立的?

如何确保多个选择是独立的?
EN

Stack Overflow用户
提问于 2015-03-04 12:39:01
回答 2查看 37关注 0票数 0

当我们必须使用几个不同的SELECT查询从数据库中的不同位置获取数据时,如何确保它们与查询(如INSERT、UPDATE或DELETE )隔离,以确保所选数据彼此一致,并且在之间不发生更改?

我知道我可以使用事务来实现插入、更新和删除的相同效果,所以所有更改都可以作为一个整体应用。但它是否也隔离了选择?

例如,3个SELECT查询返回3个不同的值,或者:

1、3、5

或者:

2,4,8

3更新查询不断切换值。如何确保我得到:

1、3、5

或者:

2,4,8

但两者之间没有任何东西,如: 2,3,5,或2,4,5等。

我知道我可以在交易中得到这些更新,但我想再检查一遍。

所以,如果我把这3个选择放在一个事务中,会有效吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-04 13:00:45

你在问如何“始终如一”地读取数据库。这些事项由事务隔离级别决定。你想要REPEATABLE READ

这是InnoDB的默认隔离级别。对于一致读取,与READ COMMITTED隔离级别有一个重要的区别:在同一事务中所有一致的读取都读取第一次读取所建立的快照。这个约定意味着,如果在同一个事务中发出几个普通(非锁定) SELECT语句,这些SELECT语句也是一致的。见第14.2.7.2节,“一致的非锁定读取”

所以,是的,如果您将SELECT语句放在一个事务中--只要事务的隔离级别是REPEATABLE READ (默认),它就能工作。

票数 3
EN

Stack Overflow用户

发布于 2015-03-04 12:45:19

是。通常情况下,事务会防止这种情况发生。查找dbms的事务隔离级别。例如,对于mysql,请参见:http://dev.mysql.com/doc/refman/5.6/en/dynindex-isolevel.html,当然,更改所有三个值的update语句必须在一个事务中。如果它们在三个不同的事务中,那么您的select就可以捕获更新之间的状态。

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

https://stackoverflow.com/questions/28854741

复制
相关文章

相似问题

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