尝试使用触发器在一个表中插入多行(插入时),但它仅适用于一行。我从表单中返回错误(没有什么特别的,只是原始插入内容有错误)

1行正常工作,但多次崩溃。这种语法有什么问题?

BEGIN
set @moonid = 1;
insert into quicknotedesc (custid,moonid) VALUES (New.id,(@moonid)),(New.id,(@moonid+1));
END

最佳答案

触发器主体的语法似乎有效。

对于几乎每个SQL客户端,都有一种机制来检测错误情况并检索错误消息。可能是由于尝试违反custidquicknotedesc列上的唯一约束或其他一些违反约束的错误。我们只是在猜测。

考虑使客户端能够检索实际的错误消息。并考虑从另一个客户端(例如MySQL命令行客户端)测试触发器的行为。



再次回答以下问题:

触发器主体的语法似乎有效。

示范:

CREATE TABLE quicknotedesc
( custid  BIGINT UNSIGNED NOT NULL
, moonid  BIGINT UNSIGNED NOT NULL
, PRIMARY KEY (custid, moonid)
);

CREATE TABLE foo
( id BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT
);




DELIMITER $$

CREATE TRIGGER foo_ai
AFTER INSERT ON foo
FOR EACH ROW
BEGIN
  SET @moonid = 1;
  INSERT INTO quicknotedesc (custid,moonid) VALUES (New.id,(@moonid)),(New.id,(@moonid+1));
END$$

DELIMITER ;




INSERT INTO foo (id) VALUES (NULL) ;

1 row(s) affected

SELECT * FROM quicknotedesc ;

custid  moonid
------  ------
     1       1
     1       2

09-30 20:38