2

新しいチームが追加、削除、または更新されたときに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;
4

1 に答える 1

8

まず、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');

ここで、挿入用のトリガーと削除用のトリガーを作成する必要があります。更新しても何も変わりません。なぜこのトリガーを作成する必要があるのか​​ わかりません。または、チームの国籍は後で変更できますか?

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 ;
于 2013-10-16T07:52:07.493 に答える