重复密钥上的MySQL。。。获取现有ID?
我正在使用重复键更新上的重复密钥上的MySQL。。。获取现有ID?,mysql,database,key,Mysql,Database,Key,我正在使用重复键更新上的来处理表上的重复插入,以便丢弃它们 在我的例子中,它是一个存储标记的简单表: id(整数、主键、AI、无符号、非空) 标记(varchar 25,非空,唯一) 这很好,但我需要检索ID—成功插入时的插入ID,或者现有ID(如果是重复的话) 我在重复密钥更新时得到insert ID=0where,我猜这是预期的行为,因为没有发生插入 我是否可以获取现有ID,或者我是否要进行单独的读取查询?您可以添加第三列ModifiedDate,并使用该列: insert into t
来处理表上的重复插入,以便丢弃它们
在我的例子中,它是一个存储标记的简单表:
- id(整数、主键、AI、无符号、非空)
- 标记(varchar 25,非空,唯一)
这很好,但我需要检索ID—成功插入时的插入ID,或者现有ID(如果是重复的话)
我在重复密钥更新时得到insert ID=0
where,我猜这是预期的行为,因为没有发生插入
我是否可以获取现有ID,或者我是否要进行单独的读取查询?您可以添加第三列ModifiedDate
,并使用该列:
insert into t(id, tag)
select id, tag
on duplicate key update ModifiedDate = now();
这将确保更新确实发生,反过来,LAST\u INSERT\u ID();这可能导致很难跟踪和/或调试错误。在非常快速和重复的操作、循环等过程中,记录可能会在同一秒钟内被更新不止一次,也就是说,使用相同的日期时间表示法,因此即使您确信正在更新记录,也不会有效地更新记录。经过数小时的调试后,我在代码中介绍了这一点。也许您可以使用整数数据类型,在每次更新时添加一个单位,或者在现有时间值上添加一秒钟,这样做。@Pere。有趣的问题。如文档和几个类似的问题/答案所述,最好的方法应该是在重复密钥更新id=LAST\u INSERT\u id(id)
上使用来解决这个问题,重复密钥更新unneedcol=coalesce(unneedcol,0)+1
@GordonLinoff和@Utkanos:。当UNIQUE
键已经存在时,即使没有更改,也会导致记录得到更新;你可以自己测试。