Блокировка таблицы в транзакции - PullRequest
3 голосов
/ 17 мая 2011

Я хотел бы иметь возможность заблокировать всю таблицу, чтобы предотвратить любые вставки или ОБНОВЛЕНИЯ в ней между «beginTransaction» и конечным «commit» или «rollback».

Я знаю, что начало транзакции приводит к неявным UNLOCK TABLES и что таблица LOCK приводит к неявному COMMIT ... так есть ли способ сделать то, что я хочу?

Ответы [ 3 ]

2 голосов
/ 17 мая 2011

Почему?Возможно, вы упустили точку транзакции.

Если вы используете повторяющееся чтение транзакции, во время транзакции могут произойти операции вставки, чтения, вставки, обновления и т. Д., НО ВЫ НЕ УВИДЕТЕ ИХ.Итак, что касается вашего процесса, таблица заблокирована для вставок / обновлений.За исключением случаев, когда они все еще происходят, они по-прежнему долговечны на диске, и другие процессы могут продолжаться.

После того, как вы сделаете первый «выбор», создается снимок, и вы фактически читаете этот снимок, а неПоследняя версия.Если это то, что вы хотите, повторяющееся чтение хорошо работает для вас.

1 голос
/ 17 мая 2011
select count(*) from table  

в транзакции, блокирует тальбу в msSQL 2000

0 голосов
/ 17 мая 2011

Если вы используете PHP, поэтому, когда происходит транзакция, вы можете установить переменную SESSION, чтобы указать сценарию ничего не делать с базой данных, т.е.транзакция завершена, просто уничтожьте переменную SESSION, чтобы могла произойти другая транзакция.Это намного проще.

...