Обновить таблицу по условию из другой таблицы Trigger - PullRequest
1 голос
/ 06 января 2012

У меня есть две таблицы

MovieStar (
    name: char(15),
    address:varchar(40),
    gender:char(1),
    birthdate: date,
    rating:float
)

StarsIn (
    movieTitle:char(25), 
    movieYear:int, 
    starname:char(15), 
    role:varchar(15)
)

starName - внешний ключ, связанный с именем MovieStar.

Я хочу увеличить рейтинг на единицу, когда вставлена ​​запись Starsin и роль новой записи 'главная'

Что бы он сделал, это;

on insert to starsin, check whether role = 'main'
if so, what is starname
increment rating of moviestar name = starname

Ответы [ 2 ]

4 голосов
/ 06 января 2012

Я бы не стал хранить значение 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 часть триггера означает, что операторы выполняются для каждой вставленной строки, но я могу ошибаться в этом.

2 голосов
/ 06 января 2012

Вам нужно create a trigger on insert и сделать намеченное update.

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