尝试使用触发器在一个表中插入多行(插入时),但它仅适用于一行。我从表单中返回错误(没有什么特别的,只是原始插入内容有错误)
1行正常工作,但多次崩溃。这种语法有什么问题?
BEGIN
set @moonid = 1;
insert into quicknotedesc (custid,moonid) VALUES (New.id,(@moonid)),(New.id,(@moonid+1));
END
最佳答案
触发器主体的语法似乎有效。
对于几乎每个SQL客户端,都有一种机制来检测错误情况并检索错误消息。可能是由于尝试违反custid
的quicknotedesc
列上的唯一约束或其他一些违反约束的错误。我们只是在猜测。
考虑使客户端能够检索实际的错误消息。并考虑从另一个客户端(例如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