gpt4 book ai didi

带有内部连接的 MySQL 触发器

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:26 25 4
gpt4 key购买 nike

我在 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

最佳答案

CREATE TABLE 语句导致隐式 COMMIT。这是不允许的。

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


但即使您能够解决此限制,为什么在塑料中每次插入行时您都想尝试创建一个新表?

当插入第二行时,触发器将尝试(再次)创建一个完全相同名称的表(这将失败,因为该名称的表已经存在。)

把车往后倒一点,在马的后面。

并弄清楚您需要满足什么要求。

当您重新开始需要触发器时,您可以在到达它时烧掉那个桥。

跟进

如果意图是尝试向 productsmaster 表中插入一行,每当向 reviews 表中插入一行时,使用插入后触发器,我们将触发器主体中需要一个 INSERT 语句。

行(刚刚插入到 reviews)的列的值在触发器中可用。无需从 reviews 表中进行选择。我们可以通过使用 NEW.

限定列名称来引用新插入行的列值(在插入后触发器中)

我建议避免使用 .*,并明确命名要从 products 中检索的列。我假设 pid 列是 products 中的唯一键(或主键)。

举个例子:

 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 $$

关于带有内部连接的 MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31188041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com