|
|
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Стандартная связка: Apache + PHP 4.3.4 + MySQL 4.0.9-gamma-nt Одновременно выполняются 2 php-скрипта, перегружаясь каждые 5 сек. У обоих есть запросы к базе на select. В одном из них я пишу след.запрос: mysql_query ("lock tables table1 write, table2 write, table1_2 write"); table1_2 - псевдоним, используемый далее в запросе, но это, наверное, не суть важно... в этом же скрипте перед строкой: mysql_query ("unlock tables"); пишу строку: while (true); тем самым, заблокировав таблицы, "торможу" скрипт и не "отпускаю" блокировки. в общем картина получается следующая: mysql_query ("lock tables table1 write, table2 write, table1_2 write"); ........................... while (true); mysql_query ("unlock tables"); В экслорере видно, как один из скриптов "подвисает", однако, в другом экплорере второй скрипт спокойно продолжает рефрешится, читая данные select`ом из заблокированных таблиц. Разве так должно быть? А может я чего-то не учёл? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 14:51 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
Сразу извинюсь, что не совсем по делу. Но Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 17:29 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
поставил вместо while (true); sleep (60);: mysql_query ("lock tables table1 write, table2 write, table1_2 write"); ........................... sleep (60); mysql_query ("unlock tables"); тоже самое: один из скриптов "засыпает" и через 30 секунд прерывается по timeout. Ну это и естественно! Но другие скрипты в эти 30 секунд без проблем продолжают обращаться к базе и читают при этом select`ом инфу из якобы заблокированных таблиц. Я же, вроде как, их заблокировал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2004, 07:37 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
poprobui zapusti eto rabotaet file 1.php Код: plaintext 1. 2. 3. 4. 5. 6. file 2.php Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2004, 09:44 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
sky2k, твой пример и на самом деле работает, пока в строку блокировки не добавить: Код: plaintext где с - псевдоним таблицы b упоминающийся в дальнейшем запросе: Код: plaintext в этом случае 2-му скрипту уже становится абсолютно плевать на блокировку таблиц a и b. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2004, 13:15 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
ono proishodit ot togo naverno chto tablicy C u tebya netu poetomu stroka Код: plaintext 1. u tebya zakanchivaetsya oshibkoi zameni na Код: plaintext 1. nujno tak i ostavit', budet rabotat' ;) mysql_query ("lock tables a write, b write", $dbh); kstati a zachem odnu i tuje tablicu B join 2 raza? eto v tvoem zaprose select * from a inner join b on a.a1=b.b1 inner join b c on a.a1=c.c1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2004, 14:47 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
add vozmojno ty ohibsya i nado ne, prosto c poluchaetsya psevdonim select * from a inner join b on a.a1=b.b1 inner join b c on a.a1=c.c1 a select * from a inner join b on a.a1=b.b1 inner join c on a.a1=c.c1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2004, 14:50 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
А вообще, интересно, конечно, получается... ...дело в том, что он и в самом деле "ругается" на то, что таблицы c не существует! А для того, что бы было боле менее понятно с псевдонимами, попробую перейти к реальным запросам. Вот как он у меня выглядит: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Даже если не обращать внимание на то, чем напичкан where ... , то всё равно видно, что без псевдонима нам не обойтись. В запросе на блокировку он и в самом деле "ругается" на то, что таблицы user_game_next не существует! Однако, если мы убираем оттуда упоминание этого псевдонима, то он будет ругаться уже в строке самого запроса select. И ругаться будет на то, что таблица user_game_next не была заблокирована! В принципе, это соответствует тому, что пишут в мануале: http://]http://dev.mysql.com/doc/mysql/ru/LOCK_TABLES.html (см. 6-й абзац). Но, как же тогда быть? Получается 2 варианта: либо я указываю псевдоним, но при этом у меня не проходит lock tables, либо я его оттуда убираю, но тогда в этом случае у меня не будет проходить select. А может я как-то не правильно пытаюсь блокировать псевдоним user_game_next? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 06:31 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
select * from a inner join b on a.hit=b.hit inner join b xxx on a.host=xxx.host etot zapros blockiruetsya pri lock table a write, b write a takje i pri lock table a write i lock table b write eto na ver. 4.0.20 vozmojno u tebya staraya versiya mysql i v novoi eto pomenyali, poprobiu obnovi a chto ty s rezultatom zaprosa budesh delat'? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 10:53 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
sky2k, мне надо блокировать не запрос! Мне надо заблокировать 2 таблицы game и user_game перед тем, как обратится к ним с тем большим запросом, который я указал выше. И, как ты уже видишь, в запросе также учавствует и псевдоним user_game_next. Ну без него никак! Далее, пока один из скриптов (а точнее, как раз ЭТОТ скрипт, который должен блокировать) будет выполнять некоторые действия с таблицами game и user_game в соответствии с тем, каким будет результат большого запроса, другой скрипт (который просто читает инфу из базы) не должен моч читать эти 2 таблицы select`ом. А если же я напишу так, как ты сказал: Код: plaintext т.е., без учёта псевдонима user_game_next, то блокировка сработает, но этот вот большой запрос тут же выдаст мне ошибку о том, что таблица user_game_next не была заблокирована командой lock tables. В принципе, это вполне соответствует тому, что написано в мануале. Но тогда вопрос: как мне заблокировать эти 2 таблицы + 3-ю, как "будущий" псевдоним, (кстати, мне так и не понятно, зачем его вообще блокировать? из другого скрипта я всё равно не смогу к нему обратится), и что бы при этом в строке "lock tables ... " у мня не возникало ошибок? P.S.: Установил MySQL 4.0.18. Проблема осталась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 12:07 |
|
||
|
не проходит блокировка
|
|||
|---|---|---|---|
|
#18+
a nu togda pishi lock table a write, b write, b as c write ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 12:41 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32601590&tid=1854992]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 471ms |

| 0 / 0 |
