В настоящее время я запускаю триггеры в своей db-структуре. У меня есть таблицы - назовем их родителями и дочерними. Триггер вызывается после вставки в таблицу cild. Вставка-Заявление являетсяСчетчик MySQL Trigger Update parent_table, используемый INSERT IGNORE INTO SELECT
INSERT IGNORE INTO child (parent_id)
SELECT
id
FROM parent
WHERE somecondition = 1
Заявление в триггере после-вставки таблицы ребенка является:
UPDATE parent SET derivate_count = derivate_count + 1;
Родительская таблица не имеет триггер на обновление или что-то еще, и я получаю ошибку : SQL Fehler (1442): не удается обновить «родительский» таблицы в хранимой функции/триггере, потому что он уже используется оператором, который вызывал эту хранимую функцию/триггер.
Я бы понял, возникла бы эта ошибка, если бы я заставил одно и то же событие на родительском столе - как это можно решить?
С наилучшими пожеланиями,
Dominik
Не ответ, но вы подсчитываете, сколько детей имеет родитель? Поскольку это так, у ребенка есть parent_id, поэтому с правильным индексом было бы молниеносно просто сделать счет на объединение двух таблиц вместо использования триггера. – Nanne
У меня есть почти 500 тыс. Строк в родительской таблице, и derivate_count требуется очень часто ... Рассчитывая это при каждом вызове, мне это нужно, это замедляет запрос вниз, как ад :) –
не должно. Если у вас есть индекс, это потребует проверки 'log (n)' (это немного больше 5). Это не займет почти времени. Вы действительно должны попытаться исправить это, вместо того, чтобы идти с помощью триггера! – Nanne