MySQL insert ignore:是否可以判断哪个insert失败?

MySQL insert ignore:是否可以判断哪个insert失败?,mysql,sql,sql-insert,create-table,Mysql,Sql,Sql Insert,Create Table,例如,如果我有: insert ignore into users (email) values ('exists@example.com'), ('doesnt-exist@example.com') 如果电子邮件是唯一的,并且已经有一行带有exists@example.com,则只插入一行。有没有可能分辨出插入了这两行中的哪一行 据我所知,insertId指的是插入的第一行,但我不知道它是哪一行。在MySQL中,一个选项是在表中有另一列,它跟踪每一行更新的最后日期: create tabl

例如,如果我有:

insert ignore into users (email)
values ('exists@example.com'), ('doesnt-exist@example.com')
如果
电子邮件
是唯一的,并且已经有一行带有
exists@example.com
,则只插入一行。有没有可能分辨出插入了这两行中的哪一行


据我所知,
insertId
指的是插入的第一行,但我不知道它是哪一行。

在MySQL中,一个选项是在表中有另一列,它跟踪每一行更新的最后日期:

create table users (
    id int auto_increment primary key, 
    email varchar(50) unique,
    updated_at timestamp default current_timestamp on update current_timestamp  
);
现在,假设该表的内容是:

id | email | updated_at -: | :----------------- | :------------------ 1 | exists@example.com | 2020-09-23 00:00:00 您可以使用位于的
updated_来标识插入了哪一行:

id | email | updated_at -: | :----------------------- | :------------------ 1 | exists@example.com | 2020-09-23 00:00:00 2 | doesnt-exist@example.com | 2020-09-23 22:33:42 id |电子邮件|更新|地址 -: | :----------------------- | :------------------ 1 | exists@example.com | 2020-09-23 00:00:00 2 |没有-exist@example.com | 2020-09-23 22:33:42

这回答了相反的问题,即未插入值。我不确定这是否有意义

但如果是这样,您可以在重复密钥更新时使用此技巧:

insert into users (email)
    values ('exists@example.com'), ('doesnt-exist@example.com')
    on duplicate key update email = (case when @emails := concat_ws(',', @emails, values(email)) then values(email) else values(email) end);
    
select @emails;
这是一把小提琴

insert into users (email)
    values ('exists@example.com'), ('doesnt-exist@example.com')
    on duplicate key update email = (case when @emails := concat_ws(',', @emails, values(email)) then values(email) else values(email) end);
    
select @emails;