事务外选择的隔离级别

时间:2011-03-09 06:31:34

标签: database relational-database

事务外SELECT会仅查看已提交的数据吗?

UPD。我的数据库是MySQL

UPD。我对简单的SELECT语句感兴趣,它没有显式事务。它会看到什么数据?我怎样才能改变它?

2 个答案:

答案 0 :(得分:1)

我假设你问的是InnoDB,因为MyISAM不支持交易。

没有 out of transaction ,即使使用默认的autocommit=1,每个语句本身都是一个事务。

您的问题的答案取决于only committed data的含义。

假设我们有一个包含行的表:

INSERT table (id, Counter, LastUpdates) VALUES (8, 100, '2011-03-08 22:04:00');

会话A正在修改行:

START TRANSACTION;
UPDATE table SET Count = 101, LastUpdates = NOW() WHERE id = 8;
SLEEP(100);
COMMIT;

如果会话B在会话A提交事务之前发出选择,那么将发生什么取决于会话B的事务隔离级别

  • READ UNCOMMITTED:会话B将读取新修改的行(counter = 101)。
  • READ COMMITTED / REPEATABLE READ (default):会话B将看到最新提交的行(计数器= 100)。
  • SERIALIZABLE:会话B将阻止,直到会话A提交。

以下是如何在没有声明事务的情况下更改会话事务级别的方法。

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

答案 1 :(得分:0)

如果你有一个特定的数据库,我们可能会告诉你什么是vanilla安装的默认值。否则......无论配置和安装数据库系统的人员将其设置为什么,或者之后有人将其设置为什么。