我在mySQL中有两个表,称之为评论和产品。然后我有另一张桌子(称之为productmaster),这是评论和产品的内在联接。我正在尝试创建一个触发器,以便在将新记录添加到评论时运行内部联接查询。
我试图将内部联接查询插入到触发器中,但它返回“#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;$$
如果有人对此有任何想法,我将不胜感激。谢谢!
杰克
答案 0 :(得分:4)
CREATE TABLE
语句会导致隐式COMMIT
。那是不允许的。
此限制没有简单的按钮解决方法。
但即使你能够解决这个限制,为什么在塑料中你想在每次插入一行时尝试创建一个新表?
当插入第二行时,触发器将尝试(再次)创建一个完全相同名称的表(由于该名称的表已经存在,因此将失败。)
将马车放回马后面。
找出你需要满足的要求。
当您回到需要触发器时,可以在到达时烧掉该桥。
<强>后续强>
如果目的是尝试在productsmaster
表中插入一行,只要在reviews
表中插入一行,使用后插入触发器,我们就需要{{{触发器体中的1}}语句。
行的列(刚刚插入INSERT
)的值在触发器中可用。无需从reviews
表格中进行选择。我们可以通过使用 reviews
我建议您避开 NEW.
,并明确指定要从.*
检索的列。我假设products
列是pid
中的唯一键(或主键)。
举个例子:
products
答案 1 :(得分:0)
永远不要在触发器中使用选择,触发器只接受更新或插入或删除