Блокирует ли транзакция связанные таблицы? - PullRequest
2 голосов
/ 20 апреля 2011

Интересно, будет ли транзакция, которая блокировала бы таблицу, заблокировать и все другие связанные таблицы?

Пример:

Таблица 1:

userId | ready
--------------
    3  |  1
    1  |  0
   ... | ...

Таблица 2:

id | name
----------
0  | John
1  |  0
n  | ...

Таблица 1 имеет внешний ключ к таблице 2.

Идентификатор таблицы 2 - Pkey.

Если я обновлю таблицу 1 в транзакции, заблокирует ли она таблицу 2?

Если я обновлю таблицу 2 в транзакции, заблокирует ли она таблицу 1?

[EDIT]

Дополнительная информация: Блокировка эскалации: таблица userId - это ссылка с помощью внешнего ключа на id.

Надеюсь, этого достаточно.

1 Ответ

2 голосов
/ 20 апреля 2011

Ни в одной базе данных большой четверки (Oracle, SQL Server, PostgreSQL, MySQL) обновление одной связанной таблицы не заблокирует другую таблицу

Да, это может заблокировать таблицы, см. Комментарий @a_horse_with_no_name.

Более того, если ваши ссылочные ограничения определены как CASCADE или SET NULL, обновление основной таблицы вызовет обновление дочерней таблицы, что, конечно, также заблокирует дочернюю таблицу.

...