У меня есть таблица с платежами, где помимо суммы платежа хранится баланс человека на момент платежа. Я хотел с помощью триггера mysql сделать следующее: при удалении платежа - баланс на начало последующих проводок уменьшался на сумму удаляемого платежа.
CREATE TRIGGER `before_delete_payment`
BEFORE DELETE ON `payment` FOR EACH ROW
BEGIN
UPDATE `payment` SET `value_before` = `value_before` - OLD.`amount`
WHERE `time` > OLD.`time`;
END
Но соответственно возникает ошибка, что триггер не может работать с таблицей, с которой он ассоциирован.
Как можно поступить в таком случае? Реализовывать все не в БД, отдельным запросом?
Выполняйте удаление платежа не простым запросом, а хранимой процедурой. А в ней реализуйте всю необходимую логику. Шаблонно:
CREATE PROCEDURE delete_payment(p_id bigint)
BEGIN
DECLARE p_time DATETIME;
DECLARE p_amount CURRENCY;
SELECT p.`time`, p.amount
INTO p_time, p_amount
FROM payment p
WHERE p.id = p_id;
UPDATE payment
SET value_before = value_before - p_amount
WHERE `time` > p_time;
DELETE FROM payment
WHERE `time` = p_time;
END;
Ну и неплохо бы всё это в транзакцию завернуть - а ну как не пройдёт какое действие...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не выводиться никакой информации(ошибок тоже нет), хотя таблица не не пустая
Я пытаюсь получить данные из таблицы MySQL, но вылезает одна из этих ошибок:
Есть база Projects
Дело в том, что развернув приложение на хостинге столкнулся с проблемой кодировки, везде использую UTF-8, отследил весь путь и выявил, что с контролёра...