mysql - 如何在 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")
有没有更好的办法?
解决方案
推荐阅读
- angular - 接收 adal-angular4/index.d.ts,找到版本 4,使用 adal-angular4 v 4.0.12 和 angular v 4.0.1 时预期出现 3 错误
- css - -webkit-clip-path 不适用于 Chrome?
- compilation - 编译错误,Elixir 中的未定义函数
- c# - 通过 post 方法将泛型值绑定回控制器
- typescript - 元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型
- php - 想在 Laravel的 {{$value['category']}} 中添加 {{$ value['category']}}
- mysql - SQL Query - 为不同的名称添加最大条件
- java - 内置异常长度比预期的短?
- requirejs - 如何控制 requirejs 设置的请求标头?
- powershell - 如何在以亲和力开头的命令窗口中重定向应用程序的输出?