首页 > 解决方案 > 如何在 MySql 中的多行插入中获取自动增量 PK

问题描述

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

DDL:

CREATE TABLE `users` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `email` varchar(100) NOT NULL,
  `is_active` tinyint(1) NOT NULL DEFAULT '1',
  `update_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  UNIQUE KEY `email` (`email`)
)

询问:

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)

上有一个 UNIQUE 约束email

从我收集的信息来看,LAST_INSERT_ID()只会给我第一个生成的批次 id。但我不知道真正发生了多少插入/更新。

我能想出的唯一方法是使用第二个 SELECT 语句:

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

有没有更好的办法?

标签: mysql

解决方案


推荐阅读