MySQL одновременный SELECT и UPDATE при работе с одной таблицей
MySQL не позволит вам сделать выборку данных SELECT из таблицы в тот момент, когда одновременно делается обновление данных UPDATE той же таблицы.
Т.е. нижеприведенный пример – недопустимый:
UPDATE table_1 AS tbl_1
SET tbl_1.cnt = (
SELECT COUNT(*) FROM table_1 AS tbl_2
WHERE tbl_1.type = tbl_2.type
);
Error: You can't specify target table 'tbl_1' for update in FROM clause
В такой ситуации нужно использовать связывание таблицы с собой. Присоединяемая таблица будет реализована через временную таблицу, поэтому подзапрос откроет и закроет таблицу до того, как UPDATE откроет её. Таким образом данный запрос будет успешно выполнен:
UPDATE table_1 AS tbl_1
INNER JOIN(
SELECT type, COUNT(*) AS cnt
FROM table_1
GROUP BY type
) AS tbl_2 USING(type)
SET tbl_1.cnt = tbl_2.cnt;
Комментарии:
Нету комментариев для вывода...