首页 > 解决方案 > 如何修复我的 FOR EACH ROW 语句未移动到下一行的错误

问题描述

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;

我遇到的问题是,当我将一组插入复制到主帐户时,只有第一条记录正确插入(先插入主帐户,然后插入加密)。然后它会为其余的插入引发错误

(错误 1062 (23000):重复条目 '*********-[accountName]' 键 'PRIMARY'。

因此,它似乎再次从列表顶部重新开始并卡在了那里。我不确定为什么它没有移动到下一行。任何见解表示赞赏!

标签: mysql

解决方案


你的问题是你的没有WHERE条件INSERT ... SELECT,所以触发器操作的第一行将所有数据插入masterEncryption。然后第二行的插入尝试做同样的事情,导致您看到重复输入错误。您可能想要这样的东西,它只会插入与 new 关联的数据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;

推荐阅读