gpt4 book ai didi

MySQL insert trigger 只针对新行

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:29 24 4
gpt4 key购买 nike

我想在 MySQL 中使用一个触发器,它仅在表 A 是新条目时才将表 A 的信息插入表 B。

如果在表 A 中创建了新条目,我的触发器总是将表 A 的所有条目插入到表 B:

CREATE TRIGGER trigger_insert
AFTER INSERT
ON tableA FOR EACH ROW

BEGIN
INSERT INTO `tableB`
(
`id`,
`active`,
`created_at`,
`updated_at`
)
SELECT
`id`,
`active`,
`created_at`,
NOW()
FROM
tableA;

END;

我的问题是,我有第二个触发器,它在任何 UPDATE 之后插入 tableA 的条目。所以我不能使 id 唯一。结果应该是 tableB 是 tableA 中任何 INSERT 和 UPDATE 语句的某种历史

如有任何帮助,我们将不胜感激!

最佳答案

您的问题是您选择了 TableA 中的所有行。我假设您打算:

INSERT INTO `tableB`(`id`, `active`, `created_at`, `updated_at`)
SELECT new.id, new.active, new.created_at, MNW()

对您的问题更一般的回答是在 tableB 上添加一个 unique 约束。假设 id 定义了一个重复条目:

alter table tableB add constaint unq_tableB_id unique (id);

然后更改 insert 以忽略任何重复的插入:

INSERT INTO `tableB`(`id`, `active`, `created_at`, `updated_at`)
SELECT `id`, `active`, `created_at`, MNW()
FROM tableA
ON DUPLICATE KEY UPDATE id = VALUES(id);

如果在使用 new 时仍然需要重复项,您可以组合这些:

INSERT INTO `tableB`(`id`, `active`, `created_at`, `updated_at`)
SELECT new.id, new.active, new.created_at, MNW()
ON DUPLICATE KEY UPDATE id = VALUES(id);

这两个查询都假定 id 是用来定义重复项的。

关于MySQL insert trigger 只针对新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38328452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com