Неизвестная системная переменная - MySQL - PullRequest
1 голос
/ 29 января 2020

Таблица учеников выглядит следующим образом

Name varchar(255), sub1 int(11), sub2 int(11), sub3 int(11)

Я создал триггер для обновления sub3 на основе суммы sub1 и sub2,

create Trigger subject_total
after INSERT
on
student
for each row
set sub3 = sub1 + sub2;

Во время выполнения кода выше, следующая ошибка обнаружена. Код ошибки: 1193. Неизвестная системная переменная 'sub3'

DB: MYSQL

Ответы [ 3 ]

2 голосов
/ 29 января 2020

Я думаю, что вы хотите before insert триггер, который устанавливает значение sub3.

Это будет:

create trigger subject_total
before insert on student
for each row
set new.sub3 = new.sub1 + new.sub2;

Внутри триггера вы можете получить доступ к значениям, которые вставляются с помощью псевдотаблицы new.

1 голос
/ 29 января 2020

Если sub3 ВСЕГДА должно быть равно сумме sub1 и sub2, я бы порекомендовал удалить поле stati c и заменить его на вычисленное:

ALTER TABLE subject_total
DROP COLUMN sub3,
ADD COLUMN sub3 INT GENERATED ALWAYS AS (sub1 + sub2) STORED;

И вам вообще не нужен триггер.

0 голосов
/ 29 января 2020

Пересмотрите свою схему следующим образом:

student
student_id, student_details, etc

student_marks
student_id, subject_id, score

Теперь проблема тривиальна, и обратите внимание, что здесь нет никакого преимущества в хранении производных данных, и, следовательно, нет необходимости в триггере.

...