2013-05-21 3 views
1

Я использую InnoDB в MySQL и получаю доступ к таблице из PHP с PDO.MYSQL PHP PDO порядок операторов в транзакции

Мне нужно заблокировать таблицу, сделать выбор, а затем, в зависимости от результата, либо вставить строку, либо нет. Поскольку я хочу, чтобы таблица была заблокирована как можно короче, могу ли я сделать это так?

prepare select 
prepare insert 
begin transaction 
lock table 
execute select 
if reservation time is available then execute insert 
unlock table 
commit 

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

Если транзакция включает только вставку, или это имеет значение?

ответ

1

beginTransaction отключает режим автосохранения, поэтому он влияет только на запросы, которые фактически фиксируют изменения. Это означает, что подготовленные заявления, SELECT и даже LOCK TABLES не затрагиваются транзакциями вообще. Фактически, если вы делаете только один INSERT, нет необходимости даже использовать транзакцию; вам нужно будет использовать их только в том случае, если вы хотите сделать несколько запросов на запись атомарно.

+0

Спасибо! Ваш ответ прояснил мое несколько запутанное мышление об этом. – George

+0

@ user1981459 не забывайте поднимать и принимать полезные ответы –

Смежные вопросы