MYSQL 触发错误,

MYSQL Trigger Error,

我正在尝试创建一个非常简单的 MySQL 触发器,它将在一个 table(Screws)上插入或更新一行时运行。我以为我已经很接近了,但是当我运行查询来创建触发器时,它只是失败并说错误,没有任何东西可以指出我正确的方向。

这是我目前所拥有的,我只是想获取 table 中两列的值并将它们相乘,然后将结果更新到第三列,我希望这在任何时候发生在此 table 中添加或编辑了一条新记录。我已经尝试尽我所能匹配一些我见过的例子,但似乎没有什么能完全匹配。

delimiter //
CREATE TRIGGER estimate
AFTER INSERT ON `Screws` FOR EACH ROW
begin
UPDATE Screws SET Quantity = Weight * num_per_ounce;
end;
delimiter ;

如果您想更改插入行的相同 table,请不要使用 after 插入触发器。而是使用 before 插入触发器:

delimiter //
CREATE TRIGGER screws_insert
BEFORE INSERT ON `Screws` FOR EACH ROW
begin
    SET new.Quantity = new.Weight * new.num_per_ounce;
end;
delimiter ;

您实质上是在尝试添加计算列,MySQL 不直接支持它。

如果您还想要 update 的触发器,那么您需要两个触发器:

delimiter //
CREATE TRIGGER screws_update
BEFORE UPDATE ON `Screws` FOR EACH ROW
begin
    SET new.Quantity = new.Weight * new.num_per_ounce;
end;
delimiter ;

注意我更改了触发器名称以包含 table。这通常是帮助跟踪触发器的好习惯。

好的,我会 post 为其他有类似问题的人提供我的最终解决方案。

原来我忘了更改另一个触发器中的触发器操作,所以我现在都可以使用了。这是我的最终代码,如果在它检查的两个字段中没有数据输入,我添加了一个检查以防止它 运行。

CREATE TRIGGER screws_insert
BEFORE INSERT ON `Screws` FOR EACH ROW
begin
IF new.Weight AND new.num_per_ounce IS NOT NULL THEN
    SET new.Quantity = new.Weight * new.num_per_ounce;
END IF;
end;

CREATE TRIGGER screws_update
BEFORE UPDATE ON `Screws` FOR EACH ROW
begin
IF new.Weight AND new.num_per_ounce IS NOT NULL THEN
    SET new.Quantity = new.Weight * new.num_per_ounce;
END IF;
end;

务必在 运行 和 SQL 之前将分隔符设置为 //。 感谢为该解决方案做出贡献的两位用户!