MYSQL触发错误,

时间:2015-01-01 22:52:10

标签: php mysql triggers phpmyadmin

我正在尝试创建一个非常简单的MySQL触发器,它将在一个表(螺丝)上插入或更新行时运行。我认为我已经非常接近但是当我运行查询来创建触发器时,它只是失败并且说错误,没有什么可以指向正确的方向。

这是我到目前为止所做的,我只是想在表中取两列的值并将它们相乘,然后将结果更新为第三列,我希望每当添加新记录或在此表中编辑。到目前为止,我已经尝试过匹配我见过的一些例子,但似乎没有什么比得上。

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

2 个答案:

答案 0 :(得分:2)

如果要更改插入行的同一个表,则不要在插入触发器后使用。而是在插入触发器之前使用

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 ;

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

答案 1 :(得分:0)

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

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

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之前将分隔符设置为//。 感谢为此解决方案做出贡献的两位用户!