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;