我不知道如何为此制定适当的标题。问题如下 - 组管理员可以向我的网站中的组添加事件,添加事件时,选择了这样的组的成员需要作为与会者自动添加到事件中。问题是,某些用户可能已经选择了他们在将该事件添加到组中之前参加该事件,因此他们的记录将存在于与参加者的表中,我将在触发器上收到Duplicate entry
错误。
我想问一下如何在2列上仍然有一个主键 - 即不允许将同一个用户插入到具有相同events_attendees
的{{1}}中,但仍然插入其他行以防万一多插入?
表组
event_id
表用户
group_id | group_name ...
表事件
user_id | user_name ...
table groups_members
event_id | event_name ...
table groups_events
group_id | user_id | autoJoinEvents
table events_attendees`
group_id | event_id
有问题的触发器位于event_id | user_id
groups_events
上
AFTER INSERT
答案 0 :(得分:2)
您尚未显示表结构,因此我无法判断您的索引是否已强制实施唯一性。一旦覆盖了它,就可以安全地假设您可以使用ON DUPLICATE KEY
INSERT INTO events_attendees (event_id, user_id)
SELECT NEW.event_id,
user_id
FROM groups_members
WHERE group_id = NEW.group_id
AND autoJoinEvents = 1
ON DUPLICATE KEY UPDATE event_id=NEW.event_id
编辑:这是您自己添加的解决方案
INSERT IGNORE INTO events_attendees (event_id, user_id)
SELECT NEW.event_id,
user_id
FROM groups_members
WHERE group_id = NEW.group_id
AND autoJoinEvents = 1
两种方式都有效。不同之处在于第二个将忽略任何错误,而第一个只会解决特定的重复键问题
答案 1 :(得分:1)
ALTER IGNORE TABLE events_attendees DROP PRIMARY KEY, ADD PRIMARY KEY(event_id,user_id);