Уровень изоляции выбора вне транзакции - PullRequest
2 голосов
/ 09 марта 2011

Будет ли SELECT вне транзакции видеть только подтвержденные данные?

UPD. Моя база данных - MySQL

UPD. Меня интересует простое утверждение SELECT, которое идет без явной транзакции. Какие данные он увидит? Как я могу это изменить?

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Я предполагаю, что вы спрашиваете об 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;
0 голосов
/ 09 марта 2011

Если вы имеете в виду определенную базу данных, мы, вероятно, можем сказать вам, что по умолчанию используется для установки vanilla.В противном случае ... это то, на что установил и установил тот, кто настроил и установил систему баз данных, или на что кто-то установил ее после этого.

...