具有内部联接的MySQL触发器
我在mySQL中有两个表,称它们为评论和产品。然后我有另一个表叫productsmaster,它是评论和产品的内部连接。我正在尝试创建一个触发器,以便在将新记录添加到评论时运行内部连接查询 我尝试将内部联接查询插入触发器,但它返回的是1422-存储函数或触发器中不允许显式或隐式提交。错误为清楚起见,我的触发器代码为:具有内部联接的MySQL触发器,mysql,join,triggers,Mysql,Join,Triggers,我在mySQL中有两个表,称它们为评论和产品。然后我有另一个表叫productsmaster,它是评论和产品的内部连接。我正在尝试创建一个触发器,以便在将新记录添加到评论时运行内部连接查询 我尝试将内部联接查询插入触发器,但它返回的是1422-存储函数或触发器中不允许显式或隐式提交。错误为清楚起见,我的触发器代码为: CREATE TRIGGER updateprodmaster AFTER INSERT ON reviews FOR EACH ROW BEGIN CREATE TABL
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;$$
如果有人对此有任何想法,我们将不胜感激。谢谢
JackCREATETABLE语句导致隐式提交。这是不允许的
对于此限制,没有简单的按钮解决方法
但是,即使您能够绕过这个限制,为什么您希望在每次插入行时都尝试创建一个新表呢
当插入第二行时,触发器将尝试再次创建完全相同名称的表,但由于该名称的表已存在,因此将失败
把车往后退一点,在马的后面
找出你需要满足的需求
当你回到需要扳机的时候,当你到达它的时候,你可以烧毁那座桥
后续行动
如果目的是尝试将一行插入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”的列命名错了。现在更新了。嗨。谢谢你的回复。当你这样说的时候,我可以看出这可能不是最好的计划。我想我要做的是更新这个表,当一个新记录添加到一个表中时,它是两个表的连接。触发器或其他方法是否合适?您好。谢谢你的回答。非常有用!杰克,你好。谢谢你的回复。当你这样说的时候,我可以看出这可能不是最好的计划。我想我要做的是更新这个表,当一个新记录添加到一个表中时,它是两个表的连接。触发器或其他方法是否合适?您好。谢谢你的回答。非常有用!杰克。