使用一个触发器在多个表中插入数据

时间:2015-01-02 17:57:03

标签: mysql triggers

我是SQL和触发器的新手,所以我的问题可能很简单,但经过大量搜索后我不知道该怎么做。

所以,我有一张桌子和球员。创建播放器时,我想将新数据复制到2个表。一些字段转到Product,一些转到Product Description。

问题是我无法通过触发器将信息插入第二个表(产品描述)中。我读到我不能使用多个触发器进行相同的操作,所以我需要用一个触发器。

以下是我到目前为止的代码:

BEGIN
INSERT INTO product (product_id, manufacturer_id)
  SELECT player.id,player.team_id
  FROM player WHERE NOT EXISTS (SELECT * FROM product 
  WHERE product.product_id = player.id);


INSERT INTO product_description (product_id, name, description)
  SELECT player.id,CONCAT_WS(' ',player.first_name,player.last_name),player.about
  FROM player WHERE NOT EXISTS (SELECT * FROM product 
  WHERE product.product_id = player.id);
END

任何帮助将不胜感激。

谢谢:)

2 个答案:

答案 0 :(得分:2)

我知道你想做类似级联插入的事情,所以我写这个有用的代码。与你的代码的区别,你使用END和我使用COMMIT;

BEGIN;

    INSERT INTO t1 (t) VALUES ("Test");

    INSERT INTO t2 (id, t) (
        SELECT id, CONCAT(t, id)
        FROM t1
        WHERE NOT EXISTS (
            SELECT id
            FROM t2
            WHERE t1.id = t2.id
        )
    );

    INSERT INTO t3 (id, t) (
        SELECT id, CONCAT(t, id)
        FROM t2
        WHERE NOT EXISTS (
            SELECT id
            FROM t3
            WHERE t2.id = t3.id
        )
    );

COMMIT;

这三个表具有相同的结构: - id:INT(11) - t:VARCHAR

级联插入应该只插入不存在的记录。

答案 1 :(得分:0)

感谢您的回复。你的代码帮助我注意到我的错误所以我修复它现在它的工作:) 这是正确的:

FROM player WHERE NOT EXISTS (SELECT * FROM product_description WHERE product_description.product_id= player.id);

再次感谢。