Задавайте вопросы, мы ответим
Вы не зашли.
Допустим, в теле процедуры напишу
Неактивен
Неактивен
vasya написал:
delimiter $$
create procedure count_row()
begin
create temporary table tb_name select * from tbl;
end$$
test >call count_row();
Query OK, 0 rows affected (0.36 sec)
test >select count(*) from tb_name;
+----------+
| count(*) |
+----------+
| 11 |
+----------+
1 row in set (0.00 sec)
Спасибо за вариант!
Однако не может ли случиться так, что при обращении к процедуре в одно и то же время возникнет путаница с данными в tb_name? Ну вдруг второй запрос изменит таблицу еще до того, как первый извлечет данные?
Или со временными таблицами это невозможно?
Неактивен
"A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed. This means that two different connections can use the same temporary table name without conflicting with each other or with an existing non-TEMPORARY table of the same name. (The existing table is hidden until the temporary table is dropped.)"
http://dev.mysql.com/doc/refman/5.1/en/ … table.html
Неактивен
Спасибо! Но речь идет как раз о двух запросах в рамках одного соединения.
На практике описанная вами ситуация мне подойдет, но хочу разобраться в теории на будущее.
Допустим, из скрипта php устанавливается соединение и выполняются запросы.
1)Первый запрос обращается к процедуре, которая создает временную таблицу.
Потом мы извлекаем результаты из временной таблицы.
2)Второй запрос обращается к этой же процедуре приблизительно в то же время, и изменяет эту же таблицу (ведь соединение одно) до того, как мы извлечем из нее данные в п.1)
Такое возможно?
Отредактированно Retrill (13.10.2010 14:00:00)
Неактивен
PHP не выполняет другие запросы по тому же соединению, пока оно не
освободилсось.
Неактивен