具有内部联接的MySQL触发器

具有内部联接的MySQL触发器,mysql,join,triggers,Mysql,Join,Triggers,我在mySQL中有两个表,称它们为评论和产品。然后我有另一个表叫productsmaster,它是评论和产品的内部连接。我正在尝试创建一个触发器,以便在将新记录添加到评论时运行内部连接查询 我尝试将内部联接查询插入触发器,但它返回的是1422-存储函数或触发器中不允许显式或隐式提交。错误为清楚起见,我的触发器代码为: CREATE TRIGGER updateprodmaster AFTER INSERT ON reviews FOR EACH ROW BEGIN CREATE TABL

我在mySQL中有两个表,称它们为评论和产品。然后我有另一个表叫productsmaster,它是评论和产品的内部连接。我正在尝试创建一个触发器,以便在将新记录添加到评论时运行内部连接查询

我尝试将内部联接查询插入触发器,但它返回的是1422-存储函数或触发器中不允许显式或隐式提交。错误为清楚起见,我的触发器代码为:

CREATE TRIGGER updateprodmaster 
AFTER INSERT ON reviews 
FOR EACH ROW 
BEGIN 
CREATE TABLE productsmaster AS
SELECT products.*, reviews.userid, reviews.usergender, reviews.userage, reviews.score
FROM products
INNER JOIN reviews
ON products.pid=reviews.pid;
END;$$
如果有人对此有任何想法,我们将不胜感激。谢谢

Jack

CREATETABLE语句导致隐式提交。这是不允许的

对于此限制,没有简单的按钮解决方法

但是,即使您能够绕过这个限制,为什么您希望在每次插入行时都尝试创建一个新表呢

当插入第二行时,触发器将尝试再次创建完全相同名称的表,但由于该名称的表已存在,因此将失败

把车往后退一点,在马的后面

找出你需要满足的需求

当你回到需要扳机的时候,当你到达它的时候,你可以烧毁那座桥

后续行动

如果目的是尝试将一行插入productsmaster表,那么每当使用after insert触发器将一行插入reviews表时,我们就需要在触发器主体中插入一条insert语句

触发器中提供了刚刚插入到审阅中的行的列的值。不需要从reviews表中进行选择。通过使用NEW限定列名,我们可以在插入后触发器中引用新插入行的列值

我建议避免使用。*,并明确指定要从产品中检索的列。我假设pid列是产品中唯一的键或主键

例如:

 DELIMITER $$

 CREATE TRIGGER trg_reviews_after_insert 
 AFTER INSERT ON reviews
 FOR EACH ROW
 BEGIN
    INSERT INTO productsmaster (col1, col2, userid, usergender, userage, score)
    SELECT p.col1
         , p.col2
         , NEW.userid
         , NEW.usergender
         , NEW.userage
         , NEW.score
      FROM products p
      WHERE p.pid = NEW.pid;
  END$$

 DELIMITER $$
CREATETABLE语句导致隐式提交。这是不允许的

对于此限制,没有简单的按钮解决方法

但是,即使您能够绕过这个限制,为什么您希望在每次插入行时都尝试创建一个新表呢

当插入第二行时,触发器将尝试再次创建完全相同名称的表,但由于该名称的表已存在,因此将失败

把车往后退一点,在马的后面

找出你需要满足的需求

当你回到需要扳机的时候,当你到达它的时候,你可以烧毁那座桥

后续行动

如果目的是尝试将一行插入productsmaster表,那么每当使用after insert触发器将一行插入reviews表时,我们就需要在触发器主体中插入一条insert语句

触发器中提供了刚刚插入到审阅中的行的列的值。不需要从reviews表中进行选择。通过使用NEW限定列名,我们可以在插入后触发器中引用新插入行的列值

我建议避免使用。*,并明确指定要从产品中检索的列。我假设pid列是产品中唯一的键或主键

例如:

 DELIMITER $$

 CREATE TRIGGER trg_reviews_after_insert 
 AFTER INSERT ON reviews
 FOR EACH ROW
 BEGIN
    INSERT INTO productsmaster (col1, col2, userid, usergender, userage, score)
    SELECT p.col1
         , p.col2
         , NEW.userid
         , NEW.usergender
         , NEW.userage
         , NEW.score
      FROM products p
      WHERE p.pid = NEW.pid;
  END$$

 DELIMITER $$

你在这里使用的是一个3d表格user_review.score,它不是JoinedPaologies,我错误地将该列命名为“reviews”。它现在更新了。你在这里使用的是一个3d表格user_review.score,它不是JoinedPologies,我把它应该是“reviews”的列命名错了。现在更新了。嗨。谢谢你的回复。当你这样说的时候,我可以看出这可能不是最好的计划。我想我要做的是更新这个表,当一个新记录添加到一个表中时,它是两个表的连接。触发器或其他方法是否合适?您好。谢谢你的回答。非常有用!杰克,你好。谢谢你的回复。当你这样说的时候,我可以看出这可能不是最好的计划。我想我要做的是更新这个表,当一个新记录添加到一个表中时,它是两个表的连接。触发器或其他方法是否合适?您好。谢谢你的回答。非常有用!杰克。