如何解决在我的FOR EACH ROW语句不会移动到下一行的错误

问题描述 投票:0回答:1
USE myDatabase;
CREATE DEFINER = CURRENT_USER TRIGGER `myDatabase`.`master_AFTER_INSERT` AFTER INSERT ON `master` FOR EACH ROW
INSERT INTO Encryption (master_AccountID, master_AccountName, TeamOps_DL, AccountKeys, KeyARNs) 
SELECT AccountID, AccountName, TeamOps_DL, AccountKeys, KeyARNs 
FROM master;

我遇到的问题是,当我复制一个组插件到主账户中,只有第一个记录正确插入(第一次到主,然后进入加密)。然后,它抛出一个错误的插入其余

(ERROR 1062(23000):重复条目 '********* - [帐户]' 为键 '主要'。

因此,它似乎是在列表的顶部重新开始一遍又卡住那里。我不知道为什么它没有移动到下一行。任何见解表示赞赏!

mysql
1个回答
2
投票

你的问题是,有你的WHERE没有INSERT ... SELECT状态,所以第一行触发器在插入来自master所有的数据运行到Encryption。第二行的插入然后尝试做同样的事情,导致您所看到的重复录入错误。你可能想是这样的,而不是将只能插入新AccountId相关的数据:

CREATE DEFINER = CURRENT_USER TRIGGER `myDatabase`.`master_AFTER_INSERT` AFTER INSERT ON `master` FOR EACH ROW
INSERT INTO Encryption (master_AccountID, master_AccountName, TeamOps_DL, AccountKeys, KeyARNs) 
SELECT AccountID, AccountName, TeamOps_DL, AccountKeys, KeyARNs 
FROM master
WHERE AccountId = NEW.AccountID;

推荐问答