Никогда раньше не работал серьезно с транзакциями, особенно в MySQL.. Поэтому хочу прояснить для себя несколько моментов...
Окружение:
* Windows 2003 Server
* MySQL 5.0.24a
* PHP 5.2.6
* MySQL ODBC Connector 3.51.24
* Таблицы InnoDB
С базой работаю либо напрямую через php (родные функции libmysql - mysql_query(), etc), либо через ODBC из .NET/JScript
Вопросы:
В рамках какой сессии живут транзакции?
Например, если я делаю так:
mysql_query("start transaction");
mysql_query("delete from mytable1 where field1=24");
mysql_query("delete from mytable2 where field2=172");
mysql_query("delete from mytable3 where field3=18");
mysql_query("update table4 set field4=11 where field5=1");
mysql_query("commit");
Правильно ли это и что произойдет если, например, в запросе с update произойдет исключение (неважно какое - например, неправильный синтаксис)? Откатится ли транзакция если я не перехватываю исключения? Что если второй поток (это ж php) в это же время будет делать то же самое (или не то же самое) - под тем же юзером - не закоммитится ли моя транзакция раньше своего коммита - или commit выполняется только для транзакции открытой для текущей php сессии (mysql сессии)?
Тот же вопрос для операций через ODBC.. Есть ли тут разница?
Очень не хочется поменять работающую логику и потом отлавливать зависшие транзакции
Без них работает, но очень уж много может съехать если в цикле из 500 запросов последний выкинет все нафиг...
Спасибо..