GrayMaster
Новичок
Блокировка внутри транзакции
Привет!
При отладке скриптов заметил следующее. Если блокировать таблицу внутри транзакции, то транзакция "срывается". Т.е. если будет ошибка после блокировки, то изменения в таблицах останутся, а не отменятся.
Это нормально? Или глючит MySQL сервер?
Примеры:
1.
start transaction;
insert into `a`...;
update `a`...;
die('stop');
commit;
тут у нас перед коммитом скрипт дохнет, и все изменения сделанные в сесии отменяются.
2.
start transaction;
lock tables `a` write;
insert into `a`...;
update `a`...;
unlock tables;
die('stop');
commit;
тут же, эфект такой, как буд то блокировки нет.
В общем вопрос таков: это специфика SQL запросов, или глюки MySQL сервера?
-~{}~ 24.06.08 18:50:
Дополнительный вопрос:
Есть серия запросов, для изменения состояния таблицы:
delete from `list`;
начало цикла
insert into `list` ... ;
конец цикла
Обычно я блокирую и делаю с ней чё хочу. Сначала удаляю оттуда всё, потом записываю по новой.
А если это происходит в транзакции, есть ли смысл блокировки ? Т.е. во время транзакции может какой-нибудь ещё запрос вклиниться между серией запросов? Или при транзаккции происходит автоматическая блокировка?
Спасибо.
Привет!
При отладке скриптов заметил следующее. Если блокировать таблицу внутри транзакции, то транзакция "срывается". Т.е. если будет ошибка после блокировки, то изменения в таблицах останутся, а не отменятся.
Это нормально? Или глючит MySQL сервер?
Примеры:
1.
start transaction;
insert into `a`...;
update `a`...;
die('stop');
commit;
тут у нас перед коммитом скрипт дохнет, и все изменения сделанные в сесии отменяются.
2.
start transaction;
lock tables `a` write;
insert into `a`...;
update `a`...;
unlock tables;
die('stop');
commit;
тут же, эфект такой, как буд то блокировки нет.
В общем вопрос таков: это специфика SQL запросов, или глюки MySQL сервера?
-~{}~ 24.06.08 18:50:
Дополнительный вопрос:
Есть серия запросов, для изменения состояния таблицы:
delete from `list`;
начало цикла
insert into `list` ... ;
конец цикла
Обычно я блокирую и делаю с ней чё хочу. Сначала удаляю оттуда всё, потом записываю по новой.
А если это происходит в транзакции, есть ли смысл блокировки ? Т.е. во время транзакции может какой-нибудь ещё запрос вклиниться между серией запросов? Или при транзаккции происходит автоматическая блокировка?
Спасибо.