Можно ли с помощью php блокировать доступ к базе MySQL пока не выполниться скрипт?
Поясню, я хочу, чтобы во время выполнения большого скрипта вывода/ввода данных в БД никто другой не смог работать с базой в этот момент (их запросы стали бы в очередь и выполнились после полного завершения скрипта). Это надо для вывода отчета на основании данных БД и очистки таблиц от записей. Иначе часть записей, вводимых пользователями в этот момент могут потеряться.
Если такое можно, то с помощью какой функции.
Мне посоветовали разобраться с транзакциями, но че-то никак
Подскажите, плз!!
Спустя 9 часов, 14 минут, 5 секунд (9.01.2009 - 08:29) Sylex написал(а):
Спустя 3 часа, 26 минут, 3 секунды (9.01.2009 - 11:55) Chemist написал(а):
Про функции LOCK TABLES/UNLOCK TABLES я уже читал, но не совсем понимаю принцип их работы.
В моем случае скрипт, который надо "оградить", выполняет следующее:
1. select (цикл из 20-ти селектов);
2. delete (цикл из 17-ти делейтов);
3. insert (цикл из 17-ти вставок)
И чтобы его оградить надо вставить два действия:
1. LOCK TABLES table_1 READ, table_2 READ, ... , table_20 READ;
2. select (цикл из 20-ти селектов);
3. delete (цикл из 17-ти делейтов);
4. insert (цикл из 17-ти вставок);
5. UNLOCK TABLES;
Это верное предположение или я чего-то напутал/недопонял?
И еще вопрос: какую блокировку лучше ставить READ или WRITE?
В моем случае скрипт, который надо "оградить", выполняет следующее:
1. select (цикл из 20-ти селектов);
2. delete (цикл из 17-ти делейтов);
3. insert (цикл из 17-ти вставок)
И чтобы его оградить надо вставить два действия:
1. LOCK TABLES table_1 READ, table_2 READ, ... , table_20 READ;
2. select (цикл из 20-ти селектов);
3. delete (цикл из 17-ти делейтов);
4. insert (цикл из 17-ти вставок);
5. UNLOCK TABLES;
Это верное предположение или я чего-то напутал/недопонял?
И еще вопрос: какую блокировку лучше ставить READ или WRITE?
Спустя 2 дня, 9 часов, 46 минут, 3 секунды (11.01.2009 - 21:42) Chemist написал(а):
Так какую все-токи блокировку лучше ставить: READ или WRITE?
Спустя 29 минут, 1 секунда (11.01.2009 - 22:11) kirik написал(а):
Chemist а вы внимательно читали то, что дал Sylex? В частности последняя ссылка.
Цитата |
Если в потоке возникает блокировка операции READ для некоторой таблицы, то только этот поток (и все другие потоки) могут читать из данной таблицы. Если для некоторой таблицы в потоке существует блокировка WRITE, тогда только поток, содержащий блокировку, может осуществлять операции READ и WRITE на данной таблице. Остальные потоки блокируются. |
Выбирайте то, что вам нужно.
_____________