如何在MySql中获得多行插入的自动增量PK

如何在MySql中获得多行插入的自动增量PK,mysql,Mysql,当一次插入多行时,我需要返回“受影响”ID的列表。某些行可能已经存在,从而导致更新 DDL: 查询: INSERT INTO users (id, email, is_active) VALUES (NULL, "joe@mail.org", true), (NULL, "jack@mail.org", false), (NULL, "dave@mail.org", true) ON DUPLICATE KEY UPDATE is_active = VA

当一次插入多行时,我需要返回“受影响”ID的列表。某些行可能已经存在,从而导致更新

DDL:

查询:

INSERT INTO users (id, email, is_active)
VALUES (NULL, "joe@mail.org", true),
       (NULL, "jack@mail.org", false),
       (NULL, "dave@mail.org", true)
ON DUPLICATE KEY UPDATE
       is_active = VALUES(is_active)
电子邮件
上有一个唯一的约束

根据我收集的信息,
LAST\u INSERT\u ID()
只会给我该批的第一个生成ID。但我不知道到底发生了多少次插入/更新

我唯一能想到的方法是在第二条SELECT语句之后:

SELECT id
FROM users
WHERE email IN ("joe@mail.org", "jack@mail.org", "dave@mail.org")

有更好的方法吗?

您可以读取受影响的行以获得插入的行数。根据
用户
的增量步长值show DDL,生成的键按顺序排列,没有间隙。什么约束必须导致ODKU?您是否修改了可以使用的时间戳?否则,最好的方法是有一个列,您可以在其中插入批次id,然后在该批次上查询表id@Akina很抱歉,忘了解释,这是一个独特的限制,我将
名称
字段更新为
电子邮件
,以便更清楚地知道它是唯一的。@如果将行作为新行插入,则每行受影响的行数值为1,如果更新现有行,则为2,如果将现有行设置为其当前值,则为0。因此,对于批插入来说,这是不确定的。您可以读取受影响的_行以获得插入的行数。根据
用户
的增量步长值show DDL,生成的键按顺序排列,没有间隙。什么约束必须导致ODKU?您是否修改了可以使用的时间戳?否则,最好的方法是有一个列,您可以在其中插入批次id,然后在该批次上查询表id@Akina很抱歉,忘了解释,这是一个独特的限制,我将
名称
字段更新为
电子邮件
,以便更清楚地知道它是唯一的。@如果将行作为新行插入,则每行受影响的行数值为1,如果更新现有行,则为2,如果将现有行设置为其当前值,则为0。因此,对于批量插入来说,这是不确定的。
SELECT id
FROM users
WHERE email IN ("joe@mail.org", "jack@mail.org", "dave@mail.org")