2013-10-15 120 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