Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Написать триггер для СУБД MySQL

Чернецов Даниил Знаток (455), на голосовании 1 год назад
Нужно чтобы этот триггер считал общую сумму покупки(total_price) в таблице purchase_data то есть умножал количество(product_count) из таблицы purchase_data на цену товара(product_price) из таблицы productПомогите пожалуйста
Голосование за лучший ответ
Коля Щетько Знаток (275) 1 год назад
 CREATE TRIGGER calculate_total_price 
AFTER INSERT ON purchase_data
FOR EACH ROW
BEGIN
UPDATE purchase_data pd
SET pd.total_price = pd.product_count * (SELECT pr.product_price FROM product pr WHERE pr.product_id = pd.product_id)
WHERE pd.purchase_id = NEW.purchase_id;
END;
Чернецов ДаниилЗнаток (455) 1 год назад
mysql> insert into purchase_data (purchase_id, product_id, product_count) values (16, 2, 2);
ERROR 1442 (HY000): Can't update table 'purchase_data' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Да почему он выдаёт эту ошибку не понимаю кажется что всё уже перепробовал
Коля Щетько Знаток (275) Чернецов Даниил, Эта ошибка возникает, когда пытаетесь изменить таблицу, которая уже используется в триггере. Дело в том, что триггеры запускаются автоматически при выполнении операции с таблицей, и изменение таблицы в триггере может привести к бесконечному циклу. Чтобы исправить эту ошибку, вам нужно переписать триггер таким образом, чтобы он не использовал таблицу, которую вы пытаетесь изменить. Например, вы можете использовать временную таблицу для сохранения изменений, а затем в конце триггера применить эти изменения к основной таблице. Если же у вас нет триггера, который мог бы вызвать эту ошибку, то возможно, проблема связана с другими процессами или запросами, которые используют эту таблицу.
Похожие вопросы