Триггер MySQL для увеличения / уменьшения значения в другой таблице - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть две таблицы, в которых отслеживаются команды в лиге и игры, в которые играют команды. У меня есть поле в таблице «команда» для побед каждой команды, и я пытаюсь создать триггер в MySQL, чтобы автоматически обновлять это поле всякий раз, когда игра добавляется / обновляется выигравшей командой, и наоборот уменьшать его всякий раз, когда игра обновлен / удален. Это мои таблицы:

CREATE TABLE team (
teamName varchar(32) NOT NULL,
teamManager varchar(32) NOT NULL,
teamPoints decimal(6,2) DEFAULT 0,
teamWins tinyint(255) unsigned DEFAULT 0,
leagueID tinyint(255) unsigned NOT NULL,
FOREIGN KEY (leagueID) REFERENCES league (leagueID),
PRIMARY KEY (teamName, leagueID));


CREATE TABLE game (
gameID int NOT NULL AUTO_INCREMENT,
gameDate date NOT NULL,
winningTeam varchar(32) NOT NULL,
losingTeam varchar(32) DEFAULT NULL,
leagueID tinyint(255) unsigned NOT NULL,
FOREIGN KEY (leagueID) REFERENCES league (leagueID),
FOREIGN KEY (winningTeam) REFERENCES team (teamName),
FOREIGN KEY (losingTeam) REFERENCES team (teamName),
PRIMARY KEY (gameID));

и моя попытка триггера для добавления:

CREATE TRIGGER addWin
AFTER INSERT, UPDATE ON game
AS
BEGIN
    UPDATE team
    SET team.teamWins = team.teamWins + 1
    WHERE team.teamName IN (SELECT inserted.winningTeam FROM inserted)
END;

1 Ответ

0 голосов
/ 15 ноября 2018

Ваш триггер выглядит как триггер SQL Server.В MySQL это будет выглядеть примерно так:

DELIMITER $$

CREATE TRIGGER addWin AFTER INSERT ON game
AS
BEGIN
    UPDATE team
        SET teamWins = teamWins + 1
        WHERE teamName = new.winningTeam;
END;$$

DELIMITER ;

Триггер обновления будет более сложным, потому что вы должны отменить предыдущее приращение.Я оставлю это тебе.

...