Я бы не стал хранить значение rating
в вашей таблице, поскольку оно может быть получено из данных другой таблицы, когда это требуется.И почему вы используете float
для подсчета?
Создайте VIEW
, который считает строки в Starsin
, основываясь на вашем условии role = 'main'
, и тогда вам не нужен триггер иСчетчик всегда будет в актуальном состоянии при добавлении или удалении новых строк.
При использовании триггерного решения вы также должны учитывать удаление строк, чтобы уменьшить счетчик.
РЕДАКТИРОВАТЬ: Из вашего комментария приведен пример триггера (хотя синтаксис может быть неправильным, поскольку я в основном работаю с SQL Server).Я предполагаю, что поле name
в таблице MovieStar
является первичным ключом и, следовательно, уникальным.
CREATE TRIGGER UpdateRating AFTER INSERT ON StarsIn
FOR EACH ROW
BEGIN
UPDATE MovieStar SET rating =
(SELECT rating FROM MovieStar WHERE name = NEW.starname) + 1
FROM MovieStar INNER JOIN NEW ON MoveStar.name = NEW.starname
WHERE NEW.role = 'main'
END
Я не знаком с MySQL, я работаю с SQL Server, где триггеры должныбыть на основе.Я предполагаю, что FOR EACH ROW
часть триггера означает, что операторы выполняются для каждой вставленной строки, но я могу ошибаться в этом.