如何在MySql中获得多行插入的自动增量PK
当一次插入多行时,我需要返回“受影响”ID的列表。某些行可能已经存在,从而导致更新 DDL: 查询:如何在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
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")