mysql - 如何修复我的 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'。
因此,它似乎再次从列表顶部重新开始并卡在了那里。我不确定为什么它没有移动到下一行。任何见解表示赞赏!
解决方案
你的问题是你的没有WHERE
条件INSERT ... SELECT
,所以触发器操作的第一行将所有数据插入master
到Encryption
。然后第二行的插入尝试做同样的事情,导致您看到重复输入错误。您可能想要这样的东西,它只会插入与 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;
推荐阅读
- javascript - 如何使用 redux reducer 更新数组,我想更改对象数组中的布尔属性以使 i 为真或假
- typescript - 使用 ":URL" 设置变量类型会导致错误
- r - 数据表中的闪亮滑块输入
- javascript - Webpack css-loader 生成错误的图像
- python - 如果网站有加载更多按钮以在页面上加载更多内容,如何抓取网站?
- python - 如何将python3设置为默认值
- angular - 单击特定行后如何在其他页面中显示 ng2 -smart table 行数据
- next.js - 设置下一个/高度满
- search - 将搜索引擎重定向到特定路线,即。'mydomain.com/somepath'
- angular - Angular StackBlitz 错误:[NoSuchMethodError:找不到方法:'write$1' on null]