@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()


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

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

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

Войти через центр авторизации
Похожие вопросы