2011-12-14 46 views
0

我需要在表中插入折扣行所有的时间我在同一个表中插入一行。 现在我知道这可能会以无限循环结束,但我已经将支票放入,以便插入折扣行时不会插入任何内容。插入到同一个表中触发器mysql

Mysql的似乎没有让this.It甚而不插入到表更不用说关火扳机

关于如何做到这一点有什么建议?

回答

2

你为什么不把你的INSERT代码改成这样的东西? :

INSERT INTO table1 (field1, field2, ...) 
VALUES (@item, @price, ....) 
    , (@item, @discount, ...) ; 

另一件事是重新评估你的数据结构。现在的方式,似乎 - 从你提供的有限信息 - 它没有正常化。您在表格中存储两种类型的信息。

也许你可以将两行(每次要插入的行)组合成一行,方法是在表中添加几列。

或将表格拆分为两个表格,一个用于“普通”项目行,另一个用于折扣项目。

2

这是不允许在MySQL中。

一个解决方案是让触发器插入两次到另一个表。然后,您将写入并更新写入表并从触发器托管读取表读取数据。

4

您不能更改连接到该表的触发器中的表(不是当前行)。

一种解决办法是插入到另一个表,并有触发插入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 ; 
+0

是的,我已经看到这个解决方案,但希望有人设法调整无嵌套触发器规则 – Jed 2011-12-14 14:30:01

+1

@Jed,抱歉,这是不可能的,其他数据库在触发器中有相同的限制。触发器绝不允许在连接到触发器的表中进行直接或间接更改,否则可能会发生无限循环。所以,即使你让table1上的触发器对table2和table2的触发器效果table1做了些什么,反过来MySQL也会拒绝。没有任何嵌套会有帮助。 _(我对此很高兴)_ – Johan 2011-12-14 21:15:04