事务外SELECT会仅查看已提交的数据吗?
UPD。我的数据库是MySQL
UPD。我对简单的SELECT语句感兴趣,它没有显式事务。它会看到什么数据?我怎样才能改变它?
答案 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安装的默认值。否则......无论配置和安装数据库系统的人员将其设置为什么,或者之后有人将其设置为什么。