MySQL多行插入跳过现有记录

时间:2014-11-22 16:21:40

标签: mysql

我不知道如何为此制定适当的标题。问题如下 - 组管理员可以向我的网站中的组添加事件,添加事件时,选择了这样的组的成员需要作为与会者自动添加到事件中。问题是,某些用户可能已经选择了他们在将该事件添加到组中之前参加该事件,因此他们的记录将存在于与参加者的表中,我将在触发器上收到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

2 个答案:

答案 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);