【问题标题】:Why is the insert statement in the trigger not inserting?为什么触发器中的insert语句没有插入?
【发布时间】:2022-01-04 15:41:16
【问题描述】:

所以我想要做的是,如果我在“angajati”(员工)表中添加一行,我希望该员工的 id 也出现在“ospatari”(服务员)表中。 “ospatari”表只有一个属性,id,并且ospatari.id和angajati.id之间有一个外键约束。

delimiter //
CREATE TRIGGER InsertOspatar BEFORE INSERT ON angajati
FOR EACH ROW
BEGIN
IF (SELECT rol FROM Inserted) = "Ospatar"
THEN
INSERT INTO ospatari VALUES(Inserted.id);
END IF;
END//

虽然这段代码没有给我任何错误,但一旦我在“angajati”中插入一行,具有相同 id 的行就不会出现在“ospatari”中。

非常感谢您的帮助, 谢谢!

【问题讨论】:

标签: mysql sql triggers sql-insert


【解决方案1】:

要访问 MySQL 中插入的值,请使用 new 伪记录,而不是 insertedinserted 将在 SQL Server 中使用,但您会错误地使用它,因为它是一个伪表,不一定只包含每个语句触发一条记录作为触发器,而不是那里的每行。)

CREATE TRIGGER insertospatar
               BEFORE INSERT
               ON angajati
               FOR EACH ROW
BEGIN
  IF new.rol = 'Ospatar' THEN
    INSERT INTO ospatari
                (target_column)
                VALUES (new.id);
  END IF;
END;

db<>fiddle

也不要习惯在字符串或日期文字中使用双引号。是的,遗憾的是 MySQL 接受了这一点,但在 SQL 中,双引号通常用于标识符,例如列名。如果您曾经使用过另一个 DBMS(或者未来的 MySQL 版本对此更加清醒),您可能会收到“无效的对象名称”错误。始终对字符串或日期文字使用单引号。

并且始终在INSERT 语句中列出目标列。否则,当向表中添加新列时,值可能会出现在错误的列中或现有的INSERTs 中断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    相关资源
    最近更新 更多