Я предполагаю, что вы спрашиваете об InnoDB, так как MyISAM не поддерживает транзакции.
Не существует такой вещи, как вне транзакции , даже со значением по умолчанию 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 будет читать недавно измененную строку (счетчик = 101). READ COMMITTED
/ REPEATABLE READ (default)
: сеанс Bувидит последний принятый ряд (счетчик = 100). SERIALIZABLE
: сеанс B будет блокироваться до фиксации сеанса A.
Вот какможно изменить уровень транзакции сеанса без объявления транзакции.
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;