Изменения, сделанные в рамках одной транзакции, «видят» друг друга? - PullRequest
5 голосов
/ 24 марта 2011

Предположим, я выполняю следующий набор SQL-запросов (псевдокод) в таблице с одним столбцом CITY:

BEGIN TRANSACTION;
INSERT INTO MyTable VALUES( 'COOLCITY' );
SELECT * FROM MyTable WHERE ALL;
COMMIT TRANSACTION;

SELECT гарантированно вернет COOLCITY?

1 Ответ

6 голосов
/ 24 марта 2011

Да.

Операция INSERT будет блокировать X как минимум для новой добавленной строки. Это не будет выпущено до конца транзакции, таким образом препятствуя параллельной транзакции удалять или обновлять эту строку.

Транзакция не блокируется своими собственными блокировками, поэтому SELECT вернет COOLCITY.

...