【问题标题】:Insert data in multiple tables with one trigger使用一个触发器在多个表中插入数据
【发布时间】:2015-01-02 17:57:03
【问题描述】:

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

所以,我有一张有玩家的桌子。创建播放器时,我想将新数据复制到 2 个表中。一些字段进入产品,一些进入产品描述。

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

这是我到目前为止的代码:

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

我们将不胜感激。

谢谢:)

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    我了解您想要执行类似级联插入的操作,因此我编写了这段代码。和你的代码不同,就是你用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;
    

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

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

    【讨论】:

      【解决方案2】:

      感谢您的回复。你的代码帮助我发现了我的错误,所以我修复了它,现在它可以工作了:) 这是正确的行:

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

      再次感谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-15
        • 2015-03-21
        • 1970-01-01
        • 2019-02-04
        • 1970-01-01
        • 2019-05-20
        • 2015-02-04
        相关资源
        最近更新 更多