Задать вопрос
@empt1ness

Почему столбцы после создания триггера mysql нельзя изменять?

У меня есть таблица stats, а в ней столбцы num1, num2, globalnum.
Мне нужно, чтобы при каждом изменении столбца num1 или num2 сумма этих двух столбцов вносилась в столбец globalnum.
Я создал 2 триггера для этого, но теперь внесение изменений данных в столбцах elo1 и elo2 невозможно, при попытке сделать это мне возвращает ошибку (4048) Invalid target for assigment in INSERT or UPDATE statement 'NEW.globalelo'.

Мой код на Python:
import mysql.connector
connection = mysql.connector.connect(
host="",
port = '',
user = '',
password = '',
database = '',
)
print("Connection successful")
cursor = connection.cursor()

trigger = """CREATE TRIGGER addstats
BEFORE INSERT ON stats
FOR EACH ROW BEGIN
UPDATE stats SET NEW.globalnum = NEW.num1 + NEW.num2;
END;
CREATE TRIGGER updatestats
BEFORE UPDATE ON stats
FOR EACH ROW BEGIN
UPDATE stats SET NEW.globalnum = NEW.num1 + NEW.num2;
END;"""
cursor.execute(trigger)
connection.commit()


Мне нужно, чтобы все данные в этих столбцах можно было изменять. Как мне это сделать?
  • Вопрос задан
  • 106 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Из триггера нельзя изменять таблицу, которой он принадлежит. Иначе получится бесконечный каскад вызовов триггера.
Вам просто надо изменить значение поля globalnum
--UPDATE stats SET NEW.globalnum = NEW.num1 + NEW.num2;
++SET NEW.globalnum = NEW.num1 + NEW.num2;

А лучше рассмотрите вариант генерируемой колонки, тогда не понадобится никаких триггеров.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽