Читал мануал http://www[dot]mysql[dot]ru/docs/man/Tra[dot][dot][dot]al_Commands[dot]html а именно про блокировку таблиц и транзакции, но он сложноват в понимании и не всё ясно.
Как я понял блокировка таблица это некий аналог блокировки файлов функцией flock($f,LOCK_EX); и flock($f, LOCK_UN);
А транзакция - позволяет откатывать если произошла ошибка.
Но возникает такой вопрос: кроме роли обеспечения возможности отката транзакция выполняет ли роль блокировки таблиц?
Если логически подумать, например один процесс имеет много-много запросов, он обведен в транзакцию, и он выполняется первым, второй процесс содержит мало запросов и запускается чуть позже, тоже обведен в транзакцию. Второй с COMMIT заканчивается раньше чем первый, а в первом, допустим, чуть позже после окончания второго процесса происходит тоже COMMIT, то что тогда будет? Будут ли приняты изменения вторым процессом, или же изменения первым?
По идее ни тот ни другой вариант корректным не будет, т.к. в первом случае не выполнится принятие(COMMIT) по первому процессу, хотя он был вызван, а во втором не выполнено принятие по второму процессу, хотя он тоже был вызван.
По правильному, как оно ожидается, должны быть приняты изменения вначале по первому а потом по второму процессу, и в этом случае получается, что первый процесс должен на время своего выполнения заблокировать второй, поставив его в очередь позади себя.
Я верно понимаю?(Отредактировано автором: 29 Января, 2011 - 10:38:41)
|