Целостность транзакций базы данных и атомарность

Предположим, что я создаю таблицу в базе данных СУБД и создаю в ней целочисленное поле. Теперь у меня два клиента одновременно изменяют значение этого целочисленного поля для одной и той же записи, скажем, клиент C1 устанавливает его на 1, и в то же время клиент C2 устанавливает его на 2 для той же записи R1.

  1. Какое значение получает поле? Как на это влияет каждый из C1 и C2, устанавливающий это значение в транзакции?
  2. Если и C1, и C2 устанавливают значение внутри транзакции, будет ли фиксация успешной для них обоих?

(Зависят ли ответы на вопросы 1 и 2 от РСУБД или существует соглашение о том, как будет вести себя система?)


person Arnav Sengupta    schedule 31.05.2016    source источник


Ответы (1)


Фиксация транзакции может быть успешной или неудачной. В случае двух параллельных транзакций, записывающих в одно и то же поле, только одна из них будет успешной в вашем случае.

Однако, в зависимости от СУБД, транзакции могут говорить «увеличить на 1» вместо «установить на 1», и в этом случае коллизии нет, и обе транзакции могут продолжаться.

person PureW    schedule 01.06.2016
comment
Только один успех зависит от каждой СУБД? Или все СУБД случайным образом терпят неудачу? - person Arnav Sengupta; 02.06.2016
comment
Ознакомьтесь с документацией по рассматриваемой СУБД. - person PureW; 02.06.2016