【问题标题】:SQL: Create Trigger that automatically copies some values into another tableSQL:创建自动将一些值复制到另一个表中的触发器
【发布时间】:2021-03-18 00:02:01
【问题描述】:

我正在尝试为 MySQL 编写一个触发器,它通过创建一个新行将名为“Kurs”的表的最后一行的一些属性自动插入到另一个表中。

表格如下所示:

    CREATE TABLE Kurs (
    KursNummer int, 
    Name varchar(255),
    Beschreibungstext varchar(255),
    Einschreibeschlüssel varchar(255) NULL, 
    Plaetze int,
    BenutzerErstellerNummer int,
    CONSTRAINT fk_BenutzerErstellerNummer
    FOREIGN KEY (BenutzerErstellerNummer) REFERENCES Benutzer(BenutzerNummer),
    PRIMARY KEY (KursNummer)
);

CREATE TABLE einschreiben (
BenutzerEinschreiberNummer int,
KursNummer int,
Eintrittsdatum date,
EinschreibeID int,
CONSTRAINT fk_BenutzerEinschreiberNummer 
FOREIGN KEY (BenutzerEinschreiberNummer) REFERENCES Benutzer(BenutzerNummer),
CONSTRAINT fk_KursNummer2 
FOREIGN KEY (KursNummer) REFERENCES Kurs(KursNummer),
PRIMARY KEY (EinschreibeID)

);

**触发器看起来像这样,但不知何故不起作用:**

CREATE TRIGGER erstellTrigger AFTER INSERT ON test.Kurs
          AS
          BEGIN
            INSERT INTO enschreiben VALUES 
              (NEW.BenutzerErstellerNummer, 
              NEW.KursNummer, 
              CURRENT_TIMESTAMP,
              1);
END;

【问题讨论】:

  • “不知何故不起作用”和不一致的数据库标签使问题很不清楚。
  • 嗨,欢迎来到 Stack Overflow。我们很高兴你在这里。当您寻求帮助时,请通过描述您当前的代码如何不起作用来帮助我们。它会返回错误吗?如果是这样,确切的错误信息是什么?如果不是,它做了什么不是你所期望的?如果您帮助我们理解问题,您将获得更好的答案。还可以考虑阅读帮助中心中的stackoverflow.com/help/how-to-ask 和其他文章,以充分利用 Stack Overflow。
  • 你设置了分隔符吗?此外,mysql 触发器中的 AS 不正确,并且触发器缺少一个 for each row 子句..

标签: mysql sql database triggers


【解决方案1】:

在插入值之前,您需要指定数据将插入哪些列。

 CREATE TRIGGER erstellTrigger AFTER INSERT ON test.Kurs
              AS
              BEGIN
                INSERT INTO enschreiben(BenutzerEinschreiberNummer, KursNummer,Eintrittsdatum) VALUES 
                  (NEW.BenutzerErstellerNummer, 
                  NEW.KursNummer, 
                  CURRENT_TIMESTAMP,
                  1);
    END;

这应该可行。

【讨论】:

  • 不是这样,如果您不插入所有列,您只需要指定列名 - 尽管如果指定列名更好..
【解决方案2】:

mysql 中的触发器在语法上不正确,mysql 触发器中的 AS 不正确,并且触发器缺少一个 for each row 子句..

这在语法上是正确的并且使用了分隔符

drop trigger if exists t;
delimiter $$
CREATE TRIGGER erstellTrigger AFTER INSERT ON Kurs
  for each row        
          BEGIN
            INSERT INTO enschreiben VALUES 
              (NEW.BenutzerErstellerNummer, 
              NEW.KursNummer, 
              CURRENT_TIMESTAMP,
              1);
END $$
delimiter ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    相关资源
    最近更新 更多