LOCK TABLES не работает

JB

Новичок
LOCK TABLES не работает

Есть многопоточный скрипт. Каждый поток пишет в таблицу результаты... Кол-во результатов в таблице оказывается всегда разное, явно не соответствует действительности. Так как когда я пишу в файл (используя flock) результат всегда одинаков. Я так понимаю таблицу тоже нужно лочить. Но почему-то такая конструкция (упрощенный пример) у меня не работает:

PHP:
$db->query("LOCK TABLES results WRITE");

for ($j = 0; $j < 100; $j++) {
   $db->query("INSERT INTO results SET test=$j");
}			 	

$db->query("LOCK TABLES results");
Это пишется из потомка. С файлами все ок, а вот с базой результат непредсказуем, она явно не лочится. Подскажите плз где я ошибся.
 

Апельсин

Оранжевое создание
что именно не работает? зачем вам LOCK TABLES 2 раза? неговоря уже о том что второй LOCK TABLES вам синтаксическую ошибку должен выдать ..
 

JB

Новичок
У меня, конечно, UNLOCK в скрипте, здесь опечатался, когда пример приводил.

Скрипт работает в 10 потоков. Должно вставиться 1000 записей (в цикле 100 INSERT). А в таблицу вставляется от 50 до 400 записей ближе в меньшую сторону.

Почему так - я не понимаю?
 

nail

Новичок
Если только insert'ы, то лочить таблицу не нужно, это атомарная операция.
Для отладки записывайте свои sql-запросы в файл и пробуйте запускать их вручную.

В идеале лучше вставлять одним запросом:
INSERT INTO results (field1, field2) VALUES(1,2,),(3,4),(5,6);

P.S.
А вообще, что значит "многопоточный скрипт"? Имелось в виду несколько процессов или именно потоков?
 

JB

Новичок
Многопоточный - имею ввиду через pcntl_fork

Все, разобрался. Моя ошибка была. LOCK'и действительно не нужны здесь.
 
Сверху