Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: транзакция и блокировка таблиц в МySQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
maximushka
Отправлено: 28 Января, 2011 - 18:12:58
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




Читал мануал 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)

 
 Top
JustUserR
Отправлено: 30 Января, 2011 - 00:04:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




maximushka пишет:
Я верно понимаю?
В действительности технология организации транзация для систем управления базами данных может обечпечить различные предполагаемые возможности - в зависимости от осуществляемого уровня сохранения целостности информационных полей а также частоты и целевых типов запросов - более подробная информация по данному вопросу предоставлена здесь http://ru[dot]wikipedia[dot]org/wiki/Транзакция


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
maximushka
Отправлено: 01 Февраля, 2011 - 11:42:55
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




Попытаться осмыслить, что написано в википедии - понял, что без примеров это невозможно. А найти литературу где бы было бы на примерах объяснено - тоже слишком сложно. Пробел весь в том, что если слишком простые вещи объясняют все и иллюстрируют примерами(например перевод денег из одного счета в другой), то вещи более сложные(например уронви изоляции в транзакциях) просто опишут непонятным понятиями и без примеров, и хоть тресни - не поймешь что имеется в виду.
Меня лично интересуют лишь транзакции в MySQL, мз PHP, в частности этот пример:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SET AUTOCOMMIT=0;
  3. START TRANSACTION;
  4. UPDATE user_account SET allsum=allsum + 1000 WHERE id='1';
  5. UPDATE user_account SET allsum=allsum - 1000 WHERE id='2';
  6. COMMIT;
  7.  

эта транзакция будет ли блокировать таблицу user_account между двумя запросами обновления в ней(для id='1' и id='2' ) от другого php&sql-процесса или нет?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB