вызовет ошибку.
олагатьsome_table
имеет два ряда с первичным ключом1
а также2
, Следующая последовательность операторов может вызвать тупик:
session 1: begin;
session 2: begin;
session 1: DELETE FROM my_table WHERE my_key = 1;
session 2: DELETE FROM my_table WHERE my_key = 2;
session 1: DELETE FROM my_table WHERE my_key = 2;
session 2: DELETE FROM my_table WHERE my_key = 1;
Блокировка не возникла бы, если бы оба сеанса были удалены в одном и том же порядке.
Теперь, перейдя к моему вопросу, что произойдет, если оператор DELETE коснется нескольких строк? Например:
session 1: begin;
session 2: begin;
session 1: DELETE FROM my_table;
session 2: DELETE FROM my_table;
Возможно ли, что два параллельных, но идентичных оператора DELETE будут удалять строки в другом порядке? Можно ли применить порядок удаления, чтобы избежать тупика?
Я не смог найти эту информацию в документации, поэтому я бы сказал, что порядок удаления не гарантирован (хотя это может быть косвенно в качестве детали реализации). Я хотел перепроверить здесь.