2013-10-15 79 views
0

我试图在mySQL中设置一个触发器,这样当一个新团队被添加,删除或更新时,它会触发countTeams中的更新并将基数和countNA等更改为相应的国籍球队。mySQL触发器更新计数

这里是我的表:

CREATE TABLE countTeams(
    base integer PRIMARY KEY, 
    countNA integer, 
    countEU integer, 
    countCN integer, 
    countSEA integer, 
    countINT integer, 
    countCIS integer 
    ); 
CREATE TABLE Team(
    TeamName varchar (30) PRIMARY KEY, 
    Captain varchar (30), 
    Nationality varchar (5) NOT NULL, 
    CreationDate date, 
    Description varchar (50), 
    foreign key(Captain) references Emails(Username) 
    ); 

我失败触发尝试。

CREATE TRIGGER teamsDown 
AFTER INSERT ON Team FOR EACH ROW 
UPDATE countTeams 
BEGIN 
SET base = (base - 1) 
IF Team.Nationality= "NA" THEN 
    UPDATE countTeams 
    SET countNA = (countNA - 1) 
ELSEIF Team.Nationality = "EU" THEN 
    UPDATE countTeams 
    SET countEU = (countEU - 1) 
IF Team.Nationality = "CN" THEN 
    UPDATE countTeams 
    SET countCN = (countCN - 1) 
IF Team.Nationality = "SEA" 
    UPDATE countTeams 
    SET countSEA = (countSEA - 1) 
IF Team.Nationality = "INT" 
    UPDATE countTeams 
    SET countINT = (countINT - 1) 
IF Team.Nationality = "CIS" 
    UPDATE countTeams 
    SET countCIS = (countCIS - 1) 
END; 

回答

5

首先,改变你的countTeams表。

CREATE TABLE countTeams(
    base int auto_increment PRIMARY KEY, 
    nationality varchar(5), 
    how_many int DEFAULT 0 
); 

然后填写所需的数据。

INSERT INTO countTeams (nationality) VALUES 
('NA'), 
('EU'), 
('CN'), 
('SEA'), 
('INT'), 
('CIS'); 

现在,您必须为insert和delete创建一个触发器。更新不会改变任何东西,不知道为什么你想为此创建一个触发器。或者队伍的国籍是否可以改变?

DELIMITER $$ 
CREATE TRIGGER inc_countTeams AFTER INSERT ON Team 
FOR EACH ROW 
BEGIN 
    UPDATE countTeams SET how_many = how_many + 1 WHERE nationality = NEW.nationality; 
END $$ 
DELIMITER ; 

DELIMITER $$ 
CREATE TRIGGER dec_countTeams AFTER DELETE ON Team 
FOR EACH ROW 
BEGIN 
    UPDATE countTeams SET how_many = how_many - 1 WHERE nationality = OLD.nationality; 
END $$ 
DELIMITER ; 

编辑:

DELIMITER $$ 
CREATE TRIGGER dec_countTeams AFTER UPDATE ON Team 
FOR EACH ROW 
BEGIN 
    UPDATE countTeams SET how_many = how_many - 1 WHERE nationality = OLD.nationality; 
    UPDATE countTeams SET how_many = how_many + 1 WHERE nationality = NEW.nationality; 
END $$ 
DELIMITER ; 
+0

三江源非常多,耶团队的国籍,以后可以改变。 – Bazoozoos

+0

哇..正是我需要..好.. – faruk