我需要在表中插入折扣行所有的时间我在同一个表中插入一行。 现在我知道这可能会以无限循环结束,但我已经将支票放入,以便插入折扣行时不会插入任何内容。插入到同一个表中触发器mysql
Mysql的似乎没有让this.It甚而不插入到表更不用说关火扳机
关于如何做到这一点有什么建议?
我需要在表中插入折扣行所有的时间我在同一个表中插入一行。 现在我知道这可能会以无限循环结束,但我已经将支票放入,以便插入折扣行时不会插入任何内容。插入到同一个表中触发器mysql
Mysql的似乎没有让this.It甚而不插入到表更不用说关火扳机
关于如何做到这一点有什么建议?
你为什么不把你的INSERT
代码改成这样的东西? :
INSERT INTO table1 (field1, field2, ...)
VALUES (@item, @price, ....)
, (@item, @discount, ...) ;
另一件事是重新评估你的数据结构。现在的方式,似乎 - 从你提供的有限信息 - 它没有正常化。您在表格中存储两种类型的信息。
也许你可以将两行(每次要插入的行)组合成一行,方法是在表中添加几列。
或将表格拆分为两个表格,一个用于“普通”项目行,另一个用于折扣项目。
这是不允许在MySQL中。
一个解决方案是让触发器插入两次到另一个表。然后,您将写入并更新写入表并从触发器托管读取表读取数据。
您不能更改连接到该表的触发器中的表(不是当前行)。
一种解决办法是插入到另一个表,并有触发插入2行到你感兴趣的。
表如果使其他表blackhole
你不必担心存储。
DELIMITER $$
CREATE TRIGGER ai_bh_test_each AFTER INSERT ON bh_test FOR EACH ROW
BEGIN
INSERT INTO table1 (field1, field2, ...) VALUES (new.field1, new.field2, ....);
INSERT INTO table1 ... values for the second row
END $$
DELIMITER ;
是的,我已经看到这个解决方案,但希望有人设法调整无嵌套触发器规则 – Jed 2011-12-14 14:30:01
@Jed,抱歉,这是不可能的,其他数据库在触发器中有相同的限制。触发器绝不允许在连接到触发器的表中进行直接或间接更改,否则可能会发生无限循环。所以,即使你让table1上的触发器对table2和table2的触发器效果table1做了些什么,反过来MySQL也会拒绝。没有任何嵌套会有帮助。 _(我对此很高兴)_ – Johan 2011-12-14 21:15:04