Коммит и транзакция mysql

У меня вопрос относительно коммитов и транзакций mysql.

У меня есть несколько операторов php, которые выполняют запросы mysql.

Могу ли я сказать следующее?

mysql_query("START TRANSACTION");
//more queries here
mysql_query("COMMIT");

Что именно это сделает? Как это помогает? Для обновлений, удалений и вставок я также обнаружил, что это блокирует другие запросы от чтения:

mysql_query("LOCK TABLES t1 WRITE, t2 WRITE");
//more queries here
mysql_query("UNLOCK TABLES t1, t2");

Будет ли это блокировать другие запросы любой природы или только запись/выбор?

Другой вопрос: скажем, один запрос выполняется и блокирует другие запросы. Другой запрос пытается получить доступ к заблокированным данным — и видит, что они заблокированы. Как это происходит? Ожидает ли он, пока данные снова не будут разблокированы, и повторно выполняет запрос? Это просто не удается и нужно повторить? Если да, то как я могу проверить?

Большое спасибо!

Dennis

7
задан dchacke 14 May 2012 в 14:22
поделиться