我在使用mysql中的触发器时遇到了严重问题。
基本上我正在尝试更新行on after insert
。我正在使用行中的现有值并尝试更新同一行的其他列。
例如:
Existing_Name Actual_Name
Product_Arc1 Arc1
Product_Arc2 Arc2
Product_Arc3
我正在使用Existing_Name
的值并提取其第二部分并使用触发器更新Actual_Name
。 BUT,因为MySQL不支持更新同一个表,触发器被激活了吗?有没有办法做我想做的事?
截至目前,我正在使用PHP脚本执行相同的效果。但这需要最终用户在数据库中发生一些更改时继续从Web浏览器触发此脚本。
任何想法都赞赏。
感谢。
答案 0 :(得分:1)
是否必须是“一个 插入后”触发器?如果您需要auto_increment值来计算要修改的字段的值,则会出现这种情况。否则应该执行“before insert”触发器。您可以通过SET NEW.fieldname = newvalue
E.g。让我们拿桌子
CREATE TABLE foo (id int auto_increment, x int, y int, primary key(id))
和create a before insert trigger
delimiter |
CREATE TRIGGER footrigger BEFORE INSERT ON foo
FOR EACH ROW BEGIN
IF NEW.y > NEW.x THEN
SET NEW.y = -1;
END IF;
END;
|
现在让我们插入两个记录,一个是y = x,另一个是y> x
INSERT INTO foo (x,y) VALUES (1,1), (1,2)
然后SELECT x,y FROM foo
返回
"x";"y"
"1";"1"
"1";"-1"
答案 1 :(得分:0)
你不能直接改变插入机制吗? 插入表(Existing_Name,Actual_Name)值($ Existing_Name,replace($ Existing_Name,'Product _','')...